Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como a função TRANSLATE() funciona no SQL Server (T-SQL)


No SQL Server, o T-SQL TRANSLATE() A função retorna a string fornecida como um primeiro argumento depois que alguns caracteres especificados no segundo argumento são convertidos em um conjunto de caracteres de destino especificado no terceiro argumento.

É semelhante ao REPLACE() função, mas com algumas diferenças importantes.

O TRANSLATE() função requer 3 argumentos; a string de entrada, os caracteres a serem substituídos e os caracteres a serem substituídos.


Sintaxe


A sintaxe fica assim:
TRANSLATE ( inputString, characters, translations)

Onde inputString é a string que contém os caracteres a serem substituídos.

Os caracteres argumento especifica quais caracteres devem ser substituídos.

As traduções argumento especifica com o que esses caracteres devem ser substituídos.

Exemplo 1 – Uso básico


Veja um exemplo de como funciona:
SELECT TRANSLATE('Cat', 'at', 'ow') AS Result;

Resultado:
+----------+
| Result   |
|----------|
| Cow      |
+----------+

Portanto, neste exemplo, o a e t os caracteres foram substituídos por o e w .

Neste caso, o REPLACE() função teria produzido o mesmo resultado. Aqui estão as duas funções lado a lado:
SELECT 
  TRANSLATE('Cat', 'at', 'ow') AS 'TRANSLATE',
  REPLACE('Cat', 'at', 'ow') AS 'REPLACE';

Resultado:
+-------------+-----------+
| TRANSLATE   | REPLACE   |
|-------------+-----------|
| Cow         | Cow       |
+-------------+-----------+

Nesse caso, o resultado para ambas as funções é o mesmo, mas por motivos diferentes.

Veja o que cada função fez:
  • TRANSLATE() substituiu a e t (cada personagem individual)
  • REPLACE() substituído at (a cadeia)

Exemplo 2 - Pedido Misto


Este exemplo demonstra onde TRANSLATE() difere de REPLACE() . Neste exemplo, altero a ordem dos caracteres a serem substituídos, bem como os caracteres a serem substituídos:
SELECT 
  TRANSLATE('Cat', 'ta', 'wo') AS 'TRANSLATE',
  REPLACE('Cat', 'ta', 'wo') AS 'REPLACE';

Resultado:
+-------------+-----------+
| TRANSLATE   | REPLACE   |
|-------------+-----------|
| Cow         | Cat       |
+-------------+-----------+

Neste caso apenas o TRANSLATE() função entrou em vigor. Isso ocorre porque essa função passa por cada caractere um por um. O REPLACE() A função, por outro lado, procura a string inteira, exatamente na mesma ordem.

Exemplo 3 – Um exemplo mais poderoso


O exemplo a seguir é baseado na documentação da Microsoft para o TRANSLATE() função. Ele demonstra um cenário em que esta função tem um benefício significativo sobre o REPLACE() função:
SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()') AS Result;

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

Para obter o resultado equivalente usando o REPLACE() função, precisaríamos fazer isso:
SELECT
REPLACE
(
      REPLACE
      (
            REPLACE
            (
                  REPLACE
                  (
                        '2*[3+4]/{7-2}',
                        '[',
                        '('
                  ),
                  ']',
                  ')'
            ),
            '{',
            '('
      ),
      '}',
      ')'
) AS Result;

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