2

SQL サーバー 2012 を使用しています。

クエリで Like を使用して、データベース内のパターンに一致させることができることはわかっています。

すなわち

SELECT * from PEOPLE where name LIKE 'STEVE%' 

steve という名前のすべての人が返されます。

しかし、クエリの代わりにデータにワイルドカードを含めることはできますか?

たとえば、これらのパターンを持つデータベースがあります

Row     Input                 Response
  1     '% is a sort of %'    'I know that.'

「VW は車の一種です」というユーザー入力を行 1 のデータに一致させるにはどうすればよいでしょうか?

背景として、私は最近チャットボットを見てきましたが、彼らは日常的に XML ファイルを介してこの種のマッチングを行っています。

ボーナス ポイントの場合、% 値を変数に格納するにはどうすればよいですか?

4

4 に答える 4

4

通常はそうしますWHERE column LIKE @variableが、逆にできないのはなぜですか。

DECLARE @x TABLE([Row] INT, Input VARCHAR(32), Response VARCHAR(32));

INSERT @x([Row],Input,Response) SELECT 1, '% is a sort of %', 'I know that.';

DECLARE @variable VARCHAR(32) = 'VW is a sort of Car';

SELECT [Row], Input, Response
    FROM @x
    WHERE @variable LIKE [Input];
于 2013-04-01T23:54:05.413 に答える
3

パターンのリストを含むこの種のテーブルを実際に使用し、これらのパターンを次のようなクエリに「適用」することができます。

SELECT PT.pattern AS matching_pattern, 
       ST.searched_field AS matched_value
FROM Pattern_Table AS PT
    INNER JOIN Searched_Table AS ST ON ST.searched_field LIKE PT.pattern

これは次のようなものを出力します:

matching_pattern    matched_value
% is a sort of %    VW is a sort of Car

SQLFiddle で確認してください(MySQL であっても動作します) 。

それが役に立てば幸い

于 2013-04-01T23:30:16.977 に答える