2015-04-29 47 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