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()
substituiua
et
(cada personagem individual)REPLACE()
substituídoat
(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) | +---------------+