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

Reemplazar varios caracteres en una cadena en SQL Server (T-SQL)

En SQL Server, REPLACE() La función nos permite reemplazar una cadena con otra cadena. Pero, ¿qué sucede si desea reemplazar una lista de caracteres con otra lista de caracteres?

El TRANSLATE() función podría ayudar.

Aquí está la explicación de Microsoft del TRANSLATE() función:

Devuelve la cadena proporcionada como primer argumento después de que algunos caracteres especificados en el segundo argumento se traduzcan a un conjunto de caracteres de destino especificado en el tercer argumento.

¿Claro como el barro?

Ejemplo

Creo que este es uno de esos momentos en los que realmente pide a gritos un ejemplo.

SELECT TRANSLATE('Fred [10 points]', '[]', '()');

Resultado:

Fred (10 points)

Básicamente, es como si hubiéramos proporcionado una lista de valores para reemplazar otra lista de valores. Pero no hay necesidad de separar cada elemento de la lista con un separador.

Número igual de caracteres

El segundo y el tercer argumento deben contener el mismo número de caracteres.

En otras palabras, no puedes hacer esto:

SELECT TRANSLATE('Fred [10 points]', '[]', '(');

Resultado:

Msg 9828, Level 16, State 1, Line 1
The second and third arguments of the TRANSLATE built-in function must contain an equal number of characters.

En este caso, el segundo argumento contiene dos caracteres, pero el tercer argumento contiene solo uno, por lo que obtenemos un error.

Esto sucede porque SQL Server necesita saber qué carácter reemplazará el segundo carácter del segundo argumento. Pasa por cada carácter, uno por uno, reemplazándolo con el carácter correspondiente del tercer argumento. Si no existe, entonces no tiene más opción que arrojar un error.

Comparado con REPLACE()

Aquí hay un ejemplo que ilustra la diferencia entre TRANSLATE() y REPLACE() .

SELECT 
  REPLACE('[] [hey]', '[]', '()') AS REPLACE,
  TRANSLATE('[] [hey]', '[]', '()') AS TRANSLATE;

Resultado:

+-----------+-------------+
 | REPLACE   | TRANSLATE   |
 |-----------+-------------|
 | () [hey]  | () (hey)    |
 +-----------+-------------+ 

El REPLACE() la función deja [hey] exactamente como es, porque toda la cadena no se proporcionó en el segundo argumento. Esta función solo encuentra una coincidencia si la cadena completa está presente.

El TRANSLATE() la función, por otro lado, reemplaza [hey] con (hey) porque reemplaza cada carácter uno a uno. No está buscando una cadena completa para reemplazar, solo está buscando cada carácter individual individualmente.