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

Los 5 datos principales para buscar y reemplazar textos SQL en SQL Server con la función REEMPLAZAR

Los editores de código y los procesadores de texto actuales vienen con una función de búsqueda y reemplazo. Es útil cuando necesita cambiar una palabra o un grupo de palabras. No queremos tirar nuestro trabajo escrito por un problema o cambio menor.

Lo mismo se aplica a nuestros datos. Los usuarios nos maldecirán si les decimos que editen lo que necesita ser renombrado. Es por eso que también está disponible una función de búsqueda y reemplazo para reemplazar textos escritos en nuestras bases de datos. Aquí entra el comando REEMPLAZAR en SQL.

La sintaxis de REEMPLAZAR en SQL es la siguiente:

REEMPLAZAR ( , , )

Tenga en cuenta que todos los parámetros son obligatorios. La puede ser un literal de cadena o un resultado de cadena de una expresión. En las tablas de bases de datos, generalmente pasamos una columna de cadena donde queremos que cambie el valor. Mientras tanto, es una cadena dentro de quieres buscar Finalmente, pasa una que reemplazará . Simple, suficiente, ¿no?

Pero puede haber algunas advertencias. De esta manera, puede averiguar cómo evitar reemplazar las palabras incorrectas o cómo evitar insertar registros duplicados en el servidor SQL. O, tal vez, no reemplazar las palabras adecuadas. Luego estropear sus datos al final.

¿Eres nuevo en SQL REPLACE? Aquí hay una hoja de trucos GRATIS para usted. Simplemente ingrese su dirección de correo electrónico a continuación y lo enviaremos directamente a su bandeja de entrada.

¿Suena bien? Profundicemos.

[ID de formulario de envío de pulso =”12251″]

1. SQL REPLACE reemplaza el texto para TODAS las ocurrencias

Así es. Barre todo el texto con la cadena que desea buscar. Déjame mostrártelo y explicarte el problema. Eche un vistazo al siguiente ejemplo:

SELECT REPLACE('know the unknown','know','seek'); 
-- OUTPUT: 'seek the unseekn. Surprise!

El saber la cadena existe dos veces, en las palabras saber y no saber norte. Si no tiene cuidado, los errores de ortografía se infiltrarán en sus datos. En su lugar, puede agregar espacio para buscar solo palabras completas. Aquí está el código modificado:

SELECT REPLACE('know the unknown','know ','seek ');   
-- OUTPUT: 'seek the unknown'.

¿Mucho mejor? Puede haber otros escenarios, pero entiendes el punto.

2. SQL REPLACE puede eliminar textos

¿Has intentado reemplazar una palabra con nada en un editor de texto? ¿O tal vez desea eliminar duplicados en SQL? También sucede en SQL REPLACE. He aquí un ejemplo:

USE AdventureWorks
GO

SELECT
 EmailAddress
,REPLACE(EmailAddress,'-','') AS NewEmailAddress
FROM person.EmailAddress;

La primera columna contiene el nombre de dominio de la dirección de correo electrónico original. El segundo elimina el guión del nombre de dominio original. Vea la captura de pantalla a continuación:

Si necesita eliminar uno o más caracteres de la cadena original, use una cadena SQL vacía como reemplazo. También puede eliminar registros duplicados en SQL de esta manera.

3. La intercalación afecta los resultados de SQL REPLACE

Cuando instala un servidor SQL, se utiliza una intercalación predeterminada. A su vez, esto será utilizado por sus bases de datos y columnas de tablas. La figura 2 muestra el que yo uso:

En mi computadora portátil, uso SQL_Latin1_CP1_CI_AS . Es una colación que no distingue entre mayúsculas y minúsculas. (Ver también CI en el nombre de colación para c ase yo sensible). Por lo tanto, las palabras Perro , perro , PERRO y perro serán tratados de la misma manera.

Probémoslo en acción:

DECLARE @string VARCHAR(200) = 'Cats are great pets 
and so easy to take care of. They make good companions. 
Having a cat around is good for children.';

SELECT REPLACE(@string,'cat','dog');

Y el resultado es:

La función REEMPLAZAR encontró la palabra Gato en Gato s en la primera frase y la palabra gato en la última oración. Es irrelevante si las letras son mayúsculas o minúsculas.

Sin embargo, si forzamos un cambio en la intercalación a una que distinga entre mayúsculas y minúsculas dentro de REEMPLAZAR, ¿qué sucederá? Aquí está el código que usa COLLATE dentro de REPLACE:

DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
They make good companions. Having a cat around is good for children.';

-- force a change to a case-sensitive collation. '_CS_' for case-sensitive
SELECT REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog'); 

Y aquí está el resultado:

Ahora verá cómo la intercalación afecta el resultado. Gato y gato ahora son tratados de manera diferente. El párrafo se vuelve confuso. Entonces, la lección es usar la intercalación con precaución.

4. Puede anidar SQL REEMPLAZAR

Puede reemplazar las palabras que ya reemplazó anidando la función REEMPLAZAR. He aquí un ejemplo:

USE AdventureWorks
GO

SELECT 
 definition
,REPLACE(REPLACE(definition,'CREATE PROCEDURE','ALTER PROCEDURE'),'BusinessEntityID','BusinessEntityNo')
FROM sys.sql_modules a
INNER JOIN sys.objects b ON a.object_id = b.object_id
WHERE a.definition LIKE '%BusinessEntityID%'
AND b.type = 'P';

El ejemplo anterior usó un REEMPLAZO dentro de un REEMPLAZO. Eso es cambiar CREAR PROCEDIMIENTO para CAMBIAR EL PROCEDIMIENTO luego ID de entidad comercial a BusinessEntityNo .

La consulta afectará a los procedimientos almacenados que usaron el BusinessEntityID columna. Esto es útil cuando desea cambiar el nombre de una columna en una tabla y reemplazar el código de la base de datos afectada. Los parámetros del procedimiento almacenado también se ven afectados, pero puede optar por reemplazarlos para conservar la consistencia de los nombres.

Tenga en cuenta que antes de ejecutar las instrucciones ALTER, debe verificar los cambios que se aplicarán. No querrás estropear las cosas, ¿verdad?

Mientras tanto, anidar REPLACE también puede solucionar el problema que tuvimos anteriormente en gatos y perros . Aquí está la solución:

DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
They make good companions. Having a cat around is good for children.';

SELECT REPLACE(REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog') COLLATE SQL_Latin1_General_CP1_CS_AS,'Cat','Dog');

Mira el nuevo resultado:

Observe también que el problema de capitalización en la Figura 3 también está solucionado.

5. Usar con ACTUALIZAR para almacenar textos reemplazados

Hasta ahora, solo hemos usado SQL REPLACE con una consulta SELECT. Esto solo nos permitirá ver la salida de REEMPLAZAR. Para almacenar su salida, también debe emitir una ACTUALIZACIÓN. He aquí un ejemplo:

USE AdventureWorks
GO

UPDATE Person.EmailAddress
 SET EmailAddress= REPLACE(EmailAddress,'-','');

Aquí hay otro ejemplo que usa MySQL que involucra blog_posts tabla en WordPress. Vea cómo puede reemplazar una URL privada por una pública:

-- View the possible results
SELECT 
 guid 
,REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net') AS NewGUID
FROM blog_posts
WHERE post_date > '2020-10-01';

-- Update the blog_posts table by replacing localhost with a fictitious URL
UPDATE blog_posts
set guid = REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net')
WHERE post_date > '2020-10-01';

El conjunto de resultados de la primera declaración anterior se puede ver a continuación usando dbForge Studio para MySQL:

Conclusión

Hasta aquí todo bien. Viste lo que REEMPLAZAR en SQL puede hacer en acción. Puede dar ideas cuando necesite cambiar direcciones de correo electrónico y URL. si cambia el nombre de una columna en una tabla utilizada en un procedimiento almacenado, vista o sinónimo.

Hagamos un resumen:

  • SQL REPLACE puede reemplazar texto para TODAS las apariciones.
  • También puede eliminar una parte del texto.
  • La configuración de intercalación puede afectar la salida de REPLACE.
  • Puede anidar el uso de SQL REPLACE.
  • Finalmente, use ACTUALIZAR para almacenar los textos reemplazados.

Si te gusta esta publicación, compártela en tus redes sociales favoritas. Háganos saber también lo que piensa en la sección de comentarios a continuación.