2017-04-25 18 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

相關問題