sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo funciona la función TRANSLATE() en SQL Server (T-SQL)

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() reemplazado a y t (cada carácter individual)
  • REPLACE() reemplazado at (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) |
+---------------+