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

Cómo reemplazar todas las apariciones de una cadena con otra cadena en SQL Server – REEMPLAZAR ()

En SQL Server, puede usar T-SQL REPLACE() Función para reemplazar todas las instancias de una cadena dada con otra cadena. Por ejemplo, puede reemplazar todas las apariciones de una determinada palabra con otra palabra.

Sintaxis

Esta es la sintaxis oficial:

REPLACE ( string_expression , string_pattern , string_replacement )

Donde string_expression es la cadena que contiene una o más instancias de la cadena (o subcadena) para reemplazar, string_pattern es la cadena a reemplazar, y string_replacement es la cadena para reemplazarlo.

Ejemplo

Aquí hay un ejemplo para demostrarlo:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'no');

Resultado:

My apartment has no art hanging on the walls and no pot plants hanging from the ceiling.

Entonces, en este ejemplo, simplemente reemplazamos la palabra some con la palabra no .

Múltiples palabras

Por supuesto, no existe una regla que diga que solo puede reemplazar una palabra con una palabra (y viceversa). Después de todo, simplemente estamos reemplazando una cadena con otra cadena, sin importar si esa cadena contiene palabras, letras, números, espacios, etc.

Así que fácilmente podríamos haber reemplazado esa palabra con dos o más palabras:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'lots of');

Resultado:

My apartment has lots of art hanging on the walls and lots of pot plants hanging from the ceiling.

Así que aquí reemplazamos la palabra some con las palabras lots of .

Eliminar una palabra

También puede eliminar una palabra (o subcadena) de la cadena. Para hacer esto, simplemente reemplácelo con la cadena vacía:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');

Resultado:

My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

Sin embargo, si observa detenidamente, verá que la nueva cadena contiene espacios dobles donde eliminamos la palabra. Esto se debe a que la palabra que eliminamos tenía espacios a la izquierda y a la derecha. Eliminamos la palabra pero no eliminamos ningún espacio, por lo tanto, quedan dos espacios.

Podemos arreglar esto incluyendo uno de los espacios en la palabra a eliminar:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');

Resultado:

My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

¡Cuidado!

Es muy fácil cometer errores al usar REPLACE() función (o cualquier buscar y reemplazar la funcionalidad para el caso).

Por ejemplo, este error:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');

Resultado:

My appicturesment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

Como puede ver, reemplazamos la palabra art con pictures . Sin embargo, en este caso la palabra apartment también se vio afectado:se ha convertido en apicturesment , que no estaba previsto. Esto se debe a que la palabra apartment contiene la subcadena art .

Por lo general, puede protegerse contra esto agregando espacios alrededor de la palabra de búsqueda, así como la palabra de reemplazo:

SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');

Resultado:

My appicturesment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

Obviamente, esto supone que está reemplazando la palabra completa. Deberá evaluar cada situación a medida que surja.

Recopilación/Sensible a mayúsculas y minúsculas

Puede usar el COLLATE opcional cláusula para aplicar una intercalación explícita a la entrada. Esto puede ser útil para realizar operaciones de búsqueda/reemplazo que distinguen entre mayúsculas y minúsculas y similares.

Aquí hay un ejemplo que compara dos intercalaciones.

Insensible a mayúsculas y minúsculas

SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CI_AS, 'cat', 'Dog');

Resultado:

Dogs, Dogs, and more Dogs!

En este ejemplo, la intercalación que especificamos incluye _CI en su nombre, que significa "Insensible a mayúsculas y minúsculas". Esto hace que se reemplacen todas las apariciones, a pesar de que la primera aparición tenga caracteres en mayúsculas.

Notarás que este método no afecta el caso de la cadena reemplazada.

Sensible a mayúsculas y minúsculas

SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CS_AS, 'cat', 'Dog');

Resultado:

Cats, Dogs, and more Dogs!

En este ejemplo, la intercalación que especificamos incluye _CS en su nombre, que significa "sensible a mayúsculas y minúsculas". Esto provoca la primera aparición de Cat debe omitirse, porque su primer carácter es una letra mayúscula (que no coincide con el caso del segundo argumento).