En SQL Server, T-SQL TRANSLATE()
La función devuelve la cadena proporcionada como primer argumento después de que algunos caracteres especificados en el segundo argumento se traducen a un conjunto de caracteres de destino especificado en el tercer argumento.
Es similar al REPLACE()
función, pero con algunas diferencias importantes.
El TRANSLATE()
la función requiere 3 argumentos; la cadena de entrada, los caracteres que se reemplazarán y los caracteres que se reemplazarán.
Sintaxis
La sintaxis es así:
TRANSLATE ( inputString, characters, translations)
Donde cadena de entrada es la cadena que contiene los caracteres a reemplazar.
Los personajes argumento especifica qué caracteres deben ser reemplazados.
Las traducciones El argumento especifica con qué se deben reemplazar esos caracteres.
Ejemplo 1:uso básico
He aquí un ejemplo de cómo funciona:
SELECT TRANSLATE('Cat', 'at', 'ow') AS Result;
Resultado:
+----------+ | Result | |----------| | Cow | +----------+
Entonces, en este ejemplo, el a
y t
los caracteres fueron reemplazados con o
y w
.
En este caso, el REPLACE()
La función habría producido el mismo resultado. Aquí están las dos funciones una al lado de la otra:
SELECT TRANSLATE('Cat', 'at', 'ow') AS 'TRANSLATE', REPLACE('Cat', 'at', 'ow') AS 'REPLACE';
Resultado:
+-------------+-----------+ | TRANSLATE | REPLACE | |-------------+-----------| | Cow | Cow | +-------------+-----------+
En este caso, el resultado de ambas funciones es el mismo, pero por razones diferentes.
Esto es lo que hizo cada función:
TRANSLATE()
reemplazadoa
yt
(cada carácter individual)REPLACE()
reemplazadoat
(la cadena)
Ejemplo 2:Orden mixto
Este ejemplo demuestra dónde TRANSLATE()
difiere de REPLACE()
. En este ejemplo, cambio el orden de los caracteres a reemplazar, así como los caracteres a reemplazar:
SELECT TRANSLATE('Cat', 'ta', 'wo') AS 'TRANSLATE', REPLACE('Cat', 'ta', 'wo') AS 'REPLACE';
Resultado:
+-------------+-----------+ | TRANSLATE | REPLACE | |-------------+-----------| | Cow | Cat | +-------------+-----------+
En este caso solo el TRANSLATE()
entró en vigor la función. Esto se debe a que esta función recorre cada carácter uno por uno. El REPLACE()
Por otro lado, la función busca la cadena completa, exactamente en el mismo orden.
Ejemplo 3:un ejemplo más poderoso
El siguiente ejemplo se basa en la documentación de Microsoft para TRANSLATE()
función. Demuestra un escenario donde esta función tiene un beneficio significativo sobre el REPLACE()
función:
SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()') AS Result;
Resultado:
+---------------+ | Result | |---------------| | 2*(3+4)/(7-2) | +---------------+
Para obtener el resultado equivalente usando REPLACE()
función, tendríamos que hacer esto:
SELECT REPLACE ( REPLACE ( REPLACE ( REPLACE ( '2*[3+4]/{7-2}', '[', '(' ), ']', ')' ), '{', '(' ), '}', ')' ) AS Result;
Resultado:
+---------------+ | Result | |---------------| | 2*(3+4)/(7-2) | +---------------+