Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come funziona la funzione TRANSLATE() in SQL Server (T-SQL)

In SQL Server, T-SQL TRANSLATE() La funzione restituisce la stringa fornita come primo argomento dopo che alcuni caratteri specificati nel secondo argomento sono stati tradotti in un insieme di caratteri di destinazione specificato nel terzo argomento.

È simile a REPLACE() funzione, ma con alcune differenze importanti.

Il TRANSLATE() la funzione richiede 3 argomenti; la stringa di input, i caratteri da sostituire ei caratteri per sostituirli.

Sintassi

La sintassi è questa:

TRANSLATE ( inputString, characters, translations)

Dove inputString è la stringa che contiene i caratteri da sostituire.

I caratteri argomento specifica quali caratteri devono essere sostituiti.

Le traduzioni argomento specifica con cosa devono essere sostituiti quei caratteri.

Esempio 1 – Utilizzo di base

Ecco un esempio di come funziona:

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

Risultato:

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

Quindi in questo esempio, il at e t i caratteri sono stati sostituiti con o e w .

In questo caso, il REPLACE() funzione avrebbe prodotto lo stesso risultato. Ecco le due funzioni affiancate:

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

Risultato:

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

In questo caso, il risultato per entrambe le funzioni è lo stesso, ma per ragioni diverse.

Ecco cosa faceva ciascuna funzione:

  • TRANSLATE() sostituito at e t (ogni singolo personaggio)
  • REPLACE() sostituito at (la stringa)

Esempio 2 – Ordine misto

Questo esempio mostra dove TRANSLATE() differisce da REPLACE() . In questo esempio, cambio l'ordine dei caratteri da sostituire, così come i caratteri per sostituirli:

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

Risultato:

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

In questo caso solo il TRANSLATE() funzione è entrata in vigore. Questo perché questa funzione passa attraverso ogni carattere uno per uno. Il REPLACE() funzione d'altra parte, cerca l'intera stringa, esattamente nello stesso ordine.

Esempio 3:un esempio più potente

L'esempio seguente si basa sulla documentazione Microsoft per TRANSLATE() funzione. Dimostra uno scenario in cui questa funzione ha un vantaggio significativo rispetto a REPLACE() funzione:

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

Risultato:

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

Per ottenere il risultato equivalente utilizzando REPLACE() funzione, dovremmo farlo:

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

Risultato:

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