我需要使用SQL匹配下面提到的模式。
输入字符串将如下所示,
"嗨谢谢你" - >应该匹配" *谢谢你"
"我非常喜欢音乐" - >应匹配" * MUSIC *"
有没有办法使用标准SQL语法执行此操作。
请帮忙。
谢谢。
答案 0 :(得分:1)
Oracle MySQL示例查询:
不区分大小写:
select * from database where column like '%THANK YOU%';
区分大小写:
select * from database where column LIKE BINARY '%THANK YOU%';
不区分大小写:
select * from database where column REGEXP 'THANK YOU';
Oracle查询:
select * from database WHERE REGEXP_LIKE(column, 'THANK YOU', 'i')
您可以在Oracle中使用LIKE,但不区分大小写的设置取决于版本。
区分大小写:
select * from database WHERE column LIKE 'THANK YOU';
有很多关于使Oracle不区分大小写的讨论。为此使用reg_exp版本更容易,并为不区分大小写设置i
标志。
<强>更新强> 最初的问题实际上与我的第一个答案相反,它确实让我开放了很多关于我为数据挖掘构建的应用程序。实际上昨晚有这个想法,但原来的海报在我做之前贴了它(小提琴掉了)。你可以让Regex匹配MySQL中REGEXP函数的两面。因此,如果将表达式列表存储到数据库中,那么您实际上可以将表达式列表与条目表或单个字符串进行比较。
我在这里添加了一个SQL小提琴:http://sqlfiddle.com/#!8/701a0/2
注意在原始示例中,&#34;正则表达式&#34;数据库中的值仅以星号开头。在Regex中,实际的字符串需要是。*可能是任何字符。
我已添加了一些示例,用于匹配网站,美国免费电话号码和Gmail帐户等内容。
INSERT INTO `myRegex` VALUES (1,'.* THANK YOU$'),(2,'MUSIC'),(3,'I LIKE .* MUSIC'),(4,'I LIKE .* MUSIC AND .* PAINTING'),(5,'^[0-9]?[ .-]?(800|866)'),(6,'\\.com$'),(7,'\\.net$'),(8,'\\.(gmail|googlemail)\\.'),(9,'THANK YOU');
输出
select * from myRegex where 'HI THANK YOU' REGEXP reg_expr;
select * from myRegex where 'THANK YOU MUCH' REGEXP reg_expr;
答案 1 :(得分:1)
我找到了一种使用MySQL的方法,
SELECT * FROM知识'谢谢你'REGEXP pattern_col;
pattern_col包含正则表达式。