如何找到两个字符串之间的字差异?

时间:2014-05-20 07:11:06

标签: asp.net sql-server c#-4.0

我遇到了一个问题。

我想使用SQL Server或任何第三方工具区分两个字符串中的单词。

e.g:

First String  ==>   "This is for test."
Second String ==>   "This is a for test."

Output        ==>   "a" from second string 

First String  ==>   "abc This is for test."
Second String ==>   "This is a for test. This is for test."

Output        ==>   "abc" in first string and "a" from second string 

1 个答案:

答案 0 :(得分:4)

Sql-server可能不是最好的工具,但您可以使用这样的脚本,它会将空格中的所有单词拆分并取出列表单词之间的差异。因此,输出中将包含其他文本中不存在的1个文本中的单词,最后该脚本将合并单词:

declare @str1 varchar(2000) = 'abc This is for test. dfg'
declare @str2 varchar(2000) = 'This is a for test. This is for test.'

declare @output1 varchar(2000)
declare @output2 varchar(2000)

SELECT @output1 = case when grp = 1 then coalesce(@output1+ ' ' + col, col)  else @output1 end,
       @output2 = case when grp = 2 then coalesce(@output2+ ' ' + col, col)  else @output2 end
FROM
(values(@str1, @str2, 1),(@str2, @str1, 2)) x(str1, str2, grp)
CROSS APPLY
(
SELECT t.c.value('.', 'VARCHAR(2000)') col
     FROM (
         SELECT x = CAST('<t>' + 
               REPLACE(str1, ' ', '</t><t>') + '</t>' AS XML)
     ) a
     CROSS APPLY x.nodes('/t') t(c)
EXCEPT 
SELECT t.c.value('.', 'VARCHAR(2000)')
     FROM (
         SELECT x = CAST('<t>' + 
               REPLACE(str2, ' ', '</t><t>') + '</t>' AS XML)
     ) a
     CROSS APPLY x.nodes('/t') t(c)
) y
SELECT @output1 FirstString, @output2 SecondString

结果:

FirstString  SecondString
abc dfg      a