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).