2011-04-26 2 views
4

SQLクエリで、異なる列の2つの文字列値が用語を共有しているかどうかを確認する簡単な方法はありますか?2つの文字列に共通の用語が含まれているかどうかを返すSQLクエリ

例えば:

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

どのバージョンのSQLですか? – LittleBobbyTables

+0

MS SQL Server 2008 R2を使用するとわかりません – Berry

+0

ストアドプロシージャを作成して、ある行からデータを取得し、空白文字で分割してから別の行にLIKEを実行できます。 – Andre

答えて

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] 
+0

これをDBに追加する方法を考えたら、うまくいった、ありがとう! – Berry

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

+0

なんらかの理由で2番目のパラメータもカラムではないので、CONTAINS(Tbl1.Str1、Tbl2.Str2)は実行できません。 – Berry

+0

フルテキスト索引ではない列に対してCONTAINS関数を使用することはできません。 – Louhike

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番目の例)

関連する問題