SQL替换功能不起作用

时间:2017-05-26 07:42:38

标签: sql tsql

当我插入评论时,如果他们是发誓的话,我想替换句子中的元音。 我有一张发誓说话的桌子。 (我现在表中只有2个单词,但稍后会添加更多单词)

我有一个像这样的表Badwords:

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

现在,当我插入'卢克,我是你的父亲'我想让它回归'L-k-,我是你的第一个'

这就是我所拥有的。但它并没有取代任何东西。

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;

输出:卢克,我是你的父亲

我希望输出像这样:L-k-,我是你的f-th-r

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分: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