2017-05-26 116 views
0

當我插入一條評論時,如果他們是發誓的單詞,我想替換句子中的元音。 我有一個發誓詞的表。 (我現在只有2個表中的話,但會有更多的稍後添加)SQL替換函數不起作用

我有一個表BADWORDS這樣的:

Word 
---------- 
Luke 
father 
---------- 

現在,當我插入「盧克,我是你爸爸」我希望它返回'Lk-,我是你的F-th-r'

這就是我所得到的。但它不能取代任何東西。

CREATE TRIGGER replace_badWords ON comment 
INSTEAD OF INSERT 
AS 
DECLARE @word AS NVARCHAR(50); 
DECLARE @wordCursor AS CURSOR; 
DECLARE @text VARCHAR(500) = (SELECT I.messageText FROM inserted I) 

SET @wordCursor = CURSOR FOR 
SELECT word FROM Badwords; 
OPEN @wordCursor; 
FETCH NEXT FROM @wordCursor INTO @word; 
WHILE @@FETCH_STATUS = 0 
BEGIN 
SET @text=REPLACE(@text,@word,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@word,'A','-'),'E','-'),'I','-'),'O','-'),'U','-')) 
FETCH NEXT FROM @wordCursor INTO @word; 
END; 
INSERT INTO Comment(messageText) values(@text) 
CLOSE @wordCursor; 
DEALLOCATE @wordCursor; 

輸出:盧克,我是你爸爸

我所要的輸出是這樣的:LK-,我是你的第f-R

有誰知道如何解決這個問題??

+3

你確定要這麼做*永久*數據庫裏面?如果在6個月內添加新的不良詞,會發生什麼情況?您必須重新處理所有數據。如果情感在一年內變化而「父親」變得可以接受會發生什麼?你必須撤消你的損壞表格(更糟糕的是,如果某人真的進入了並且意味着「f-th-r」 - 你實際上改變了他們的原創)。我強烈建議存儲用戶提供的實際文本,並且僅在演示時執行此替換 - 使用*當前*一組「壞詞」 –

+2

(此外,您的觸發器由於其他原因而被打破 - 「插入」可以包含0,1或**多個**行) –

+1

您也不會從字符串中解析單詞。當「蛤蜊」調皮時,「Rodger的聲明是衷心的」會發生什麼?您想如何處理重疊的單詞,例如如果「lug」和「beluga」都是冒犯性的? – HABO

回答

0

您可以在包含單詞的表上進行更新,並通過替換表中所有單詞的元音來設置實際字符串。

DECLARE @String VARCHAR(100) = 'Luke, I am your father' 

DECLARE @AbusiveWords TABLE(ID INT,Word VARCHAR(10)) 
INSERT INTO @AbusiveWords (ID,Word) values (1,'Luke'),(2,'father') 

UPDATE @AbusiveWords 
SET @String=REPLACE(@String,Word,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Word,'A','-'),'E','-'),'I','-'),'O','-'),'U','-')) 
PRINT(@string); 

輸出:

L-k- , I am your f-th-r 
+0

這適用於提供的示例數據,但也將替換其他實例。考慮一下HABO在上面提出的白鯨和耳朵的例子。將(3,'lug')添加到桌子上,並將上面的字符串更改爲「Luke,我是你的父親是白鯨」。它會改變白鯨,儘管這不在壞詞的列表中。 –