2012-06-25 13 views
7

Próbuję usunąć określone ciągi z pola Opis w tabeli. W tym celu zrobiłem tę funkcjęUżycie T-SQL usuwa określone słowa z ciągu znaków


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 

Jestem nowym do programowania SQL i chciałbyś poprawić w tej sprawie. Przypuśćmy, że chcę mieć tabelę, która zawiera listę "złych słów", które chciałem usunąć z ciągu i przechodzić przez nie podczas czyszczenia opisu.

Chciałbym podkreślić, że proces ten musi być tak wydajny, jak to tylko możliwe, ponieważ mam do czynienia z 15 milionami rekordów.

+2

Serwer SQL ma funkcję "Zamień" Sugerowałbym użycie go i zastąpienie przez ''. Oto link do MSFT (http://msdn.microsoft.com/en-us/library/ms186862.aspx) Jeśli martwisz się wydajnością, możesz zajrzeć do wyrażeń regularnych, które działają jeszcze szybciej. – xQbert

+0

Jestem zaniepokojony, że używając funkcji zamiany wanilii, otrzymam części usuniętego słowa pozostawiając mi denerwujący kawałek sznurka. Tak jak gdybym zamienił "Run", a znajdzie "Running", pozostanę przy "ning". Bardzo chcę zacząć używać wyrażeń regularnych, ale rozumiem, że trzeba mieć różne przywileje w bazie danych i mieć dodatkowe oprogramowanie (studio graficzne?) Zainstalowane na komputerze - w tej chwili nie jest to możliwe. – user1075081

+1

Rozumiem i doceniam problem. Jest to jednak problem, którego nie można całkowicie uniknąć. jedynym sposobem na skuteczne złagodzenie tego problemu jest inspekcja wizualna każdego wpisu; z procesem zatwierdzania. nawet z twoją techniką napotkasz problemy na końcu zdania. ZŁE SŁOWO. – xQbert

Odpowiedz

18

Dlaczego po prostu nie użyjesz REPLACE?

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

Możesz również dodać do tego spacje wiodące i końcowe, jeśli chcesz sprawdzić częściowe słowa. –

Powiązane problemy