我有下表。替換開始單詞
tblInput
Id WordPosition Words
-- ----------- -----
1 1 Hi
1 2 How
1 3 are
1 4 you
2 1 Ok
2 2 This
2 3 is
2 4 me
tblReplacement
Id ReplacementWords
--- ----------------
1 Hi
2 are
3 Ok
4 This
的tblInput
持有的話的名單,而tblReplacement
認爲我們需要在tblInput搜索詞 一個d如果找到匹配,那麼我們需要替換 那些。
但問題是,如果在開始時發現任何匹配,我們需要替換這些詞。
即,在tblInput,
在ID 1的情況下,將被替換的字是唯一'Hi'
and not 'are'
因爲之前「是」,「如何」是存在的,它不在tblReplacement列表中。
在Id 2的情況下,將被替換的字詞是'Ok' & 'This'
。由於這些都
話是存在於tblReplacement表的第一個字即「確定」後
更換,第二個字是「這」這裏首先出現的
列表ID類別2
。由於它在tblReplacement中可用,並且是現在的第一個字,所以這將會被
取代。
因此所需的輸出將是
Id NewWordsAfterReplacement
--- ------------------------
1 How
1 are
1 you
2 is
2 me
我迄今爲止的做法:
;With Cte1 As(
Select
t1.Id
,t1.Words
,t2.ReplacementWords
From tblInput t1
Cross Join tblReplacement t2)
,Cte2 As(
Select Id, NewWordsAfterReplacement = REPLACE(Words,ReplacementWords,'')
From Cte1)
Select * from Cte2 where NewWordsAfterReplacement <> ''
但我沒有得到期望的輸出。它取代了所有的匹配詞。
迫切需要幫助**。(基於集)**
我使用SQL Server 2005的
感謝
您一直在問這個問題或其中的輕微變化......我幾乎傾向於重複關閉。另外:你正在處理**字符串操作** - 這是**不**你可以以基於集合的方式做的事情 - 你需要擺弄字符串 - 沒有任何基於此的設置(和不方法來做到這一點「基於集合」)。使用CTE(WITH .....)就像你可以做的那樣基於set-based - 再一次:你究竟是什麼**真的**想要? – 2010-06-18 05:13:42