sql >> Database >  >> RDS >> Sqlserver

Hoe de functie TRANSLATE() werkt in SQL Server (T-SQL)

In SQL Server is de T-SQL TRANSLATE() functie retourneert de tekenreeks die als eerste argument is opgegeven nadat enkele tekens die in het tweede argument zijn opgegeven, zijn vertaald in een doelset van tekens die zijn opgegeven in het derde argument.

Het is vergelijkbaar met de REPLACE() functie, maar met enkele belangrijke verschillen.

De TRANSLATE() functie vereist 3 argumenten; de invoerreeks, de tekens die moeten worden vervangen en de tekens die ze moeten vervangen.

Syntaxis

De syntaxis gaat als volgt:

TRANSLATE ( inputString, characters, translations)

Waar inputString is de tekenreeks die de tekens bevat die moeten worden vervangen.

De tekens argument specificeert welke karakters vervangen moeten worden.

De vertalingen argument specificeert waarmee die tekens moeten worden vervangen.

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld van hoe het werkt:

SELECT TRANSLATE('Cat', 'at', 'ow') AS Result;

Resultaat:

+----------+
| Result   |
|----------|
| Cow      |
+----------+

Dus in dit voorbeeld is de a en t tekens zijn vervangen door o en w .

In dit geval is de REPLACE() functie zou hetzelfde resultaat hebben opgeleverd. Hier zijn de twee functies naast elkaar:

SELECT 
  TRANSLATE('Cat', 'at', 'ow') AS 'TRANSLATE',
  REPLACE('Cat', 'at', 'ow') AS 'REPLACE';

Resultaat:

+-------------+-----------+
| TRANSLATE   | REPLACE   |
|-------------+-----------|
| Cow         | Cow       |
+-------------+-----------+

In dit geval is de uitkomst voor beide functies hetzelfde, maar om verschillende redenen.

Dit is wat elke functie deed:

  • TRANSLATE() vervangen a en t (elk afzonderlijk teken)
  • REPLACE() vervangen at (de string)

Voorbeeld 2 – Gemengde bestelling

Dit voorbeeld laat zien waar TRANSLATE() verschilt van REPLACE() . In dit voorbeeld verander ik de volgorde van de tekens die moeten worden vervangen, evenals de tekens om ze te vervangen:

SELECT 
  TRANSLATE('Cat', 'ta', 'wo') AS 'TRANSLATE',
  REPLACE('Cat', 'ta', 'wo') AS 'REPLACE';

Resultaat:

+-------------+-----------+
| TRANSLATE   | REPLACE   |
|-------------+-----------|
| Cow         | Cat       |
+-------------+-----------+

In dit geval alleen de TRANSLATE() functie in werking is getreden. Dit komt omdat deze functie elk teken één voor één doorloopt. De REPLACE() functie daarentegen zoekt naar de hele string, in precies dezelfde volgorde.

Voorbeeld 3 – Een krachtiger voorbeeld

Het volgende voorbeeld is gebaseerd op de Microsoft-documentatie voor de TRANSLATE() functie. Het demonstreert een scenario waarin deze functie een aanzienlijk voordeel heeft ten opzichte van de REPLACE() functie:

SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()') AS Result;

Resultaat:

+---------------+
| Result        |
|---------------|
| 2*(3+4)/(7-2) |
+---------------+

Om het equivalente resultaat te krijgen met de REPLACE() functie, moeten we dit doen:

SELECT
REPLACE
(
      REPLACE
      (
            REPLACE
            (
                  REPLACE
                  (
                        '2*[3+4]/{7-2}',
                        '[',
                        '('
                  ),
                  ']',
                  ')'
            ),
            '{',
            '('
      ),
      '}',
      ')'
) AS Result;

Resultaat:

+---------------+
| Result        |
|---------------|
| 2*(3+4)/(7-2) |
+---------------+

  1. Hoe strings in SQL Server te ontsnappen met behulp van PHP?

  2. Conversie mislukt bij het converteren van datum en/of tijd van tekenreeks tijdens het invoegen van datetime

  3. Kan het door Oracle beheerde stuurprogramma async/wait correct gebruiken?

  4. SQLalchemy voert geen wijzigingen door bij het instellen van de rol