2015-04-29 48 views
2

我有兩個字符串列像下面比較字符串1的部分與第二個字符串

Column01    Column02 

ABC School System  Worked in Private school. 

我想匹配這些列這樣的,如果從列的任何一個詞A在B列可用它給出了一個比賽結果。在這種情況下,「學校」一詞出現在兩欄中,所以這應該被視爲一個匹配。

A列中的一個單詞可以定義爲長度大於3的任何字符串,並且在兩側都有空格或者在一側有空格而另一側沒有空格(以迎合起始點並關閉單詞)。

我如何在SQL Server中執行此操作?

+0

你到目前爲止嘗試過什麼?爲什麼sql server 2008和sql server 2012都被標記? – ughai

+0

我知道「like」的基本字符串命令,但在這種情況下沒有幫助。 – Tayyab

+0

我有兩個版本,Server 2008和2012.所以這兩者都適合我。 – Tayyab

回答

1

您可以創建一個XML,將空格用作令牌,然後使用.nodes()xml列中獲取單詞並將它們進行比較。像這樣的東西

WITH Table1 as 
(
    SELECT 1 as ID,'ABC School System' as col1, 'Worked in Private school' as col2 
), CTE2 as 
(
    SELECT M.id,c.value('text()[1]','VARCHAR(100)') COLLATE Latin1_General_CI_AS as col1val,c2.value('text()[1]','VARCHAR(100)') COLLATE Latin1_General_CI_AS as col2val 
    FROM 
    (
     SELECT id, 
     CONVERT(XML,'<i>' + REPLACE(col1,' ','</i><i>') + '</i>') col1, 
     CONVERT(XML,'<i>' + REPLACE(col2,' ','</i><i>') + '</i>') col2 
     FROM Table1 
    )M 
    CROSS APPLY col1.nodes('i') as t(c) 
    CROSS APPLY col2.nodes('i') as t2(c2) 
) 
SELECT ID,col1val,col2val 
FROM CTE2 
WHERE col1val = col2val 
    AND LEN(col1val) > 3 
    AND LEN(col2val) > 3 
+0

這確實有效。我將嘗試將其納入SQL查詢中。再次感謝。 – Tayyab