我正在使用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文件进行这种匹配。
对于奖励积分,如何将%值存储在变量中?
答案 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)
正则表达式可让您访问匹配的模式部分。我假设你的意思是“将%存储在一个变量中”:
答案 3 :(得分:0)
你可以做一个非常相似的搜索
where input like '%is a sort of%'
或者您可以查找REGULAR EXPRESSIONS regex
以获得更复杂的模式匹配