2012-06-25 18 views
7

Bazı dizeleri bir tablodaki Açıklama alanından kaldırmaya çalışıyorum. Bu amaçla ben bu işleviT-SQL kullanma Belirtilen sözcükleri bir dizeden kaldırın

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 


SQL programlama için yeni ve bu konuda geliştirmek istiyorum yaptık. Varsayalım ki, bir yazı dizisinden kaldırılmak istenen 'kötü kelimeler' listesinin bir listesini içeren bir tabloya sahip olmak istedim ve açıklamayı temizlerken bunun içinden geçtim.

Bu işlemin 15 milyon kayıtla uğraşırken olabildiğince verimli olması gerektiğine dikkat etmeliyim.

+2

SQL sunucusunda 'Değiştir' işlevi kullanılmasını öneririm ve '' ile değiştirin. İşte bir [MSFT bağlantısı] (http://msdn.microsoft.com/en-us/library/ms186862.aspx) Performanstan endişe ediyorsanız, daha hızlı çalışacak şekilde düzenli ifadelere bakabilirdiniz. – xQbert

+0

Vanilya değiştirme işlevini kullanarak, bir sözcüğün parçalarını alacağım, beni biraz sinir bozucu bir parça bırakıyor. "Çalıştır" yerine "Koşu" yı bulur ve "ning" ile kalırım. Düzenli ifadeler kullanmaya başlamak istiyorum ancak veri tabanında çeşitli ayrıcalıklara sahip olmanız ve bilgisayarda ek bir yazılıma (görsel stüdyoya) sahip olmanız gerektiğini anlıyorum - şu anda bu bir seçenek değil. – user1075081

+1

Endişeyi anlıyorum ve takdir ediyorum. Ancak, tam olarak önlenemediğiniz bir sorun. Bu konuyu tam olarak azaltmanın tek yolu, her girişin görsel olarak incelenmesidir; bir onay süreci ile. Tekniğinizle bile, bir cümlenin sonunda problemlerle karşılaşırsınız. KÖTÜ BİR KELİME. – xQbert

cevap

18

Neden sadece REPLACE kullanıyorsunuz?

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

Kısmi kelimeleri kontrol etmek isterseniz, bunu baştaki ve sondaki boşluklarla da yapabilirsiniz. –