2012-06-25 17 views
7

Estoy tratando de eliminar ciertas cadenas de un campo de Descripción en una tabla. Con este fin he hecho esta funciónUsando T-SQL eliminar palabras especificadas de una cadena


CREATE FUNCTION fnDescriptionClean 
(@strDescription varchar(50)) 
RETURNS varchar(50) 
AS 
BEGIN 

declare @Return varchar(50) 
declare @badword varchar(50) 

set @badword = 'Front' 
set @strDescription = CASE 

--Remove from mid string 

WHEN @strDescription LIKE '% ' + @Badword +' %' THEN REPLACE(@strDescription,' ' + @Badword + ' ',' ') 

--Remove from start of string 

WHEN @strDescription LIKE @Badword +' %' THEN RIGHT(@strDescription, (len(@strDescription)-(len(@Badword)+1))) 

--Remove from end of string 

WHEN @strDescription LIKE '% ' + @Badword THEN LEFT(@strDescription, (len(@strDescription)-(len(@Badword)+1))) 
ELSE @strDescription END 

set @badword = 'Right' 
set @strDescription = CASE 

WHEN @strDescription LIKE '% ' + @Badword +' %' THEN REPLACE(@strDescription,' ' + @Badword + ' ',' ') 
WHEN @strDescription LIKE @Badword +' %' THEN RIGHT(@strDescription, (len(@strDescription)-(len(@Badword)+1))) 
WHEN @strDescription LIKE '% ' + @Badword THEN LEFT(@strDescription, (len(@strDescription)-(len(@Badword)+1))) 
ELSE @strDescription END 

RETURN  @strDescription 
end 

Soy nuevo en la programación SQL y me gustaría mejorar en esto. Suponiendo que quisiera tener una tabla que contuviera una lista de "malas palabras" que quisiera eliminar de una cadena y recorrerla al limpiar la descripción.

Debo señalar que este proceso debe ser lo más eficiente posible ya que estoy tratando con 15 millones de registros.

+2

SQL Server tiene una función 'Reemplazar' Sugeriría usarlo y reemplazarlo por ''. Aquí hay un [enlace de MSFT] (http://msdn.microsoft.com/en-us/library/ms186862.aspx) Si le preocupa el rendimiento, puede examinar expresiones regulares que parecen funcionar aún más rápido. – xQbert

+0

Me preocupa el uso de la función de reemplazo de vainilla para eliminar partes de una palabra, dejándome un poco molesto. Como si reemplazo "Ejecutar" y encuentra "En ejecución", me quedaré con "ning". Tengo muchas ganas de empezar a usar expresiones regulares pero entiendo que debe tener varios privilegios en la base de datos y tener software adicional (visual studio?) Instalado en la computadora, por lo que por el momento no es una opción. – user1075081

+1

Entiendo y aprecio la preocupación. Sin embargo, es un problema que no puedes evitar por completo. la única forma de mitigar verdaderamente este problema es la inspección visual de cada entrada; con un proceso de aprobación. incluso con su técnica, se encontraría con problemas al final de una oración. MALA PALABRA. – xQbert

Respuesta

18

¿Por qué no solo usa REPLACE?

UPDATE tableName 
SET columnName = REPLACE(columnName,'specific word',''); 
+0

También puede rellenar esto con espacios iniciales y finales, si desea verificar palabras parciales. –

Cuestiones relacionadas