SQL查询返回两个字符串是否包含共享术语

时间:2011-04-26 16:00:55

标签: sql sql-server sql-server-2008

是否有一种简单的方法可以在SQL查询中验证来自不同列的两个字符串值是否共享一个术语?

例如:

Str1 = "little brown fox" Str2 = "big brown bear" Return_Value = 1
Str1 = "Sun is shinning" Str2 = "Its raining" Return_Value = 0

3 个答案:

答案 0 :(得分:3)

您可能需要对要比较的字符串进行一些修改,但我建议您查看CONTAINS函数

示例:

WHERE
CONTAINS('little brown fox', 'big OR brown OR bear') OR 
CONTAINS('Sun is shinning', 'Its OR raining')

您可以在此处阅读有关CONTAINS的更多信息:

http://msdn.microsoft.com/en-us/library/ms187787.aspx

答案 1 :(得分:1)

你没有指定你的DBMS,但是对于PostgreSQL,这将是这样的:

select count(*) from (
  select unnest(string_to_array('little brown fox', ' '))
  intersect
  select unnest(string_to_array('big brown bear', ' '))
)  t

将返回两个字符串之间匹配的单词数(对于上面的示例为1,对于第二个示例为0)

答案 2 :(得分:0)

这可能不是最好的用户功能,但这可能会帮助您顺利完成所需的工作。

CREATE FUNCTION [dbo].[ContainsSharedTerm]
( @SearchString1 varchar(255), @SearchString2 varchar(255) )
RETURNS BIT
AS
BEGIN
    DECLARE @MatchFound BIT
    SET @MatchFound = 0
    DECLARE @TempString VARCHAR(255)

    WHILE LEN(@SearchString1) > 0 AND @MatchFound = 0
    BEGIN
        IF CHARINDEX(' ',@SearchString1) = 0
        BEGIN
            SET @TempString = @SearchString1
            SET @SearchString1 = ''
        END
        ELSE
        BEGIN
            SET @TempString = LEFT(@SearchString1,CHARINDEX(' ',@SearchString1)-1)
            SET @SearchString1 = RIGHT(@SearchString1,LEN(@SearchString1)-CHARINDEX(' ',@SearchString1))
        END

        IF CHARINDEX(@TempString,@SearchString2) > 0
        BEGIN
            SET @MatchFound = 1
        END
    END
    RETURN @MatchFound
END

CREATE TABLE #TestTable (
    Col1 VARCHAR(100),
    Col2 VARCHAR(100)
)

INSERT INTO [#TestTable] ([Col1],[Col2]) VALUES ('little brown fox','big brown bear')
INSERT INTO [#TestTable] ([Col1],[Col2]) VALUES ('Sun is shinning','Its raining')

SELECT [Col1],[Col2],dbo.[ContainsSharedTerm]([Col1],[Col2]) AS [Match]
FROM [#TestTable]

DROP TABLE [#TestTable]