2

我正在使用 SQL Server 2012。

我知道我可以在查询中使用 Like 来匹配数据库中的模式:

IE

SELECT * from PEOPLE where name LIKE 'STEVE%' 

将返回所有称为史蒂夫的人。

但是我可以在数据中使用通配符而不是查询。

例如,我有一个数据库,其中包含这些模式

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

我如何能够将“大众汽车是一种汽车”的用户输入与第 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 回答
1

正则表达式将使您能够访问它匹配的模式部分。我假设这就是“将 % 存储在变量中”的意思:

http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

于 2013-04-01T23:19:44.860 回答
0

你可以做一个非常相似的搜索

where input like '%is a sort of%'

或者您可以查找正则表达式regex以获得更复杂的模式匹配

于 2013-04-01T23:18:56.567 回答