TSQL - 与Like匹配的模式

时间:2013-04-01 23:14:49

标签: sql-server database tsql pattern-matching

我正在使用SQL Server 2012。

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

SELECT * from PEOPLE where name LIKE 'STEVE%' 

将归还所有名为史蒂夫的人。

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

例如,我有一个在

中有这些模式的数据库
Row     Input                 Response
  1     '% is a sort of %'    'I know that.'

我如何将'VW是一种汽车'的用户输入与第1行中的数据相匹配?

为了背景起见,我最近一直在看聊天机器人,他们经常通过XML文件进行这种匹配。

对于奖励积分,如何将%值存储在变量中?

4 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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

Have a look at it on SQLFiddle(即使它是MySQL仍然有效)

希望有所帮助

答案 2 :(得分:1)

正则表达式可让您访问匹配的模式部分。我假设你的意思是“将%存储在一个变量中”:

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

答案 3 :(得分:0)

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

where input like '%is a sort of%'

或者您可以查找REGULAR EXPRESSIONS regex以获得更复杂的模式匹配