2017-04-25 19 views
1

我有一个包含特定单词的表。如果该字符串存在于另一个表中,Sql会替换元音

enter image description here

现在,当我插入一个新的职位,我想更换元音在单词表中包含被插入之前的字符串。所以这就是为什么我需要使用触发器功能来代替插入。 我得到这个至今:

Create TRIGGER trChangeAbusiveWord 
ON Post 
INSTEAD OF INSERT 
AS 
BEGIN 

Declare @abusiveWord nvarchar(max) 
Declare @correctedWord nvarchar(max) 

Select @abusiveWord = b.Woord FROM Scheldwoorden b WHERE exists 
    (select Message FROM inserted a where a.Message like '%' + b.Woord + '%') 


Select @correctedWord = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@abusiveWord, 'A', '*'), 'E', '*'), 'O', '*'), 'U', '*'), 'I', '*') 

Select Replace(Message, @abusiveWord, @correctedWord) FROM Message b 
When done changed words, insert query here. 

END 

现在,当我插入此消息:

INSERT into Post(Id_User, Id_Topic, Titel, Message) VALUES (7,1, 'TriggerMe', 'Hi im bear and I want to cook a nice meal') 

我想更改消息“你好IM B - R和我要到C - KA漂亮的米 - L”

但随着我走到这一步,查询什么,它只是改变了第一个字是这样的:

‘嗨IM b ** R和我想煮一顿美餐’

+0

如果说我的理解是正确的,这是你在想什么。 1. ** Scheldwoorden **是一个包含特定单词列表的表格。 2. **插入**是包含整个字符串的表格_“你好,我想做一顿美餐”_ 因此,这里下面的select查询只返回一条记录到变量** @ abusiveWord * * 'Select @abusiveWord = b.Woord FROM Scheldwoorden b WHERE exists' '(select Inhoud FROM inserted a where a.Inhoud like'%'+ b.Woord +'%')' 因此它只替换单词_Bear_因为它被存储到变量中。 – Joby

+0

@Joby是的,这是正确的,但我不能让它用多个词 – Jeffreydww

+0

字符串操作真的不是SQL的强项 - 我怀疑这会更容易在代码中完成。 – Bridge

回答

1

你可以做,

DECLARE @String VARCHAR(100) = 'Hi im bear and I want to cook a nice meal' 

    SELECT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@String,'A','- 
      '),'E','-'),'I','-'),'O','-'),'U','-') 

使用下面的查询字符串只给定的值替换更新包含该单词的表格,并通过替换表格中所有单词的元音来设置实际字符串。

DECLARE @String VARCHAR(100) = 'Hi im bear and I want to cook a nice meal' 

DECLARE @AbusiveWords TABLE(ID INT,Word VARCHAR(10)) 
INSERT INTO @AbusiveWords (ID,Word) values (1,'bear'),(2,'cook'),(3,'meal') 

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

输出:

Hi im b--r and I want to c--k a nice m--l 
+0

这帮了我很多很小的修改,我得到了我想要的! – Jeffreydww

0

使用replace内置功能:

DECLARE @String VARCHAR(100) = 'Hi im bear and I want to cook a nice meal' 

DECLARE @Word1 VARCHAR(100) = 'bear' 
DECLARE @Word2 VARCHAR(100) = 'meal' 
DECLARE @Word3 VARCHAR(100) = 'cook' 

DECLARE @ReplaceWord1 VARCHAR(100) = '' 
DECLARE @ReplaceWord2 VARCHAR(100) = '' 
DECLARE @ReplaceWord3 VARCHAR(100) = '' 

SELECT @ReplaceWord1 = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@Word1, 'A', 
     '*'), 'E', '*'), 'O', '*'), 'U', '*'), 'I', '*') 
SELECT @ReplaceWord2 = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@Word2, 'A', 
     '*'), 'E', '*'), 'O', '*'), 'U', '*'), 'I', '*') 
SELECT @ReplaceWord3 = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@Word3, 'A', 
     '*'), 'E', '*'), 'O', '*'), 'U', '*'), 'I', '*') 

SELECT REPLACE(REPLACE(REPLACE(@String, @Word1, @ReplaceWord1), @Word2, 
     @ReplaceWord2), @Word3, @ReplaceWord3) 

对于更换多个单词:

DECLARE @String VARCHAR(100) = 'Hi im bear and I want to cook a nice meal' 

DECLARE @ReplaceWords TABLE (OrgWord VARCHAR(100) , ReplaceWord 
     VARCHAR(100) , Flag TINYINT DEFAULT(0)) 
DECLARE @OrgWord VARCHAR(100) = '' 
DECLARE @ReplaceWord VARCHAR(100) = '' 

INSERT INTO @ReplaceWords (OrgWord) 
SELECT 'bear' UNION ALL 
SELECT 'meal' UNION ALL 
SELECT 'cook' 

UPDATE @ReplaceWords SET ReplaceWord = 
     REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(OrgWord, 'A', '*'), 'E', 
     '*'), 'O', '*'), 'U', '*'), 'I', '*') 

WHILE EXISTS(SELECT 1 FROM @ReplaceWords WHERE Flag = 0) 
BEGIN 

    SELECT TOP 1 @OrgWord = OrgWord , @ReplaceWord = ReplaceWord 
    FROM @ReplaceWords WHERE Flag = 0 

    SET @String = REPLACE(@String, @OrgWord, @ReplaceWord) 

    UPDATE @ReplaceWords SET Flag = 1 WHERE OrgWord = @OrgWord 

END 

SELECT @String 
+0

这改变了整个句子的所有元音,不仅与其他表中的词相匹配的词 – Jeffreydww

+0

@ Jeffreydww,其他表中的词有什么样的词。指定任何样品 – Mansoor

+0

好吧,在这个例子中我好像有消息'你好,我想要做饭'现在在另一张桌子上,我得到了熊,饭和厨师的话。所以在这句话中,我只想改变这些特定词中的元音。bear这个词必须变成b-r,那么我们在这个表格列表中也有cook这个词,所以这个词必须变成c-k,当这个匹配的词被改变时,我想得到这样的句子:'Hi im b --r和我想c - ka m - l' – Jeffreydww

相关问题