我遇到了一个问题。
我想使用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
答案 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