LIKE和REGEXP有什么区别?
我有一个mySQL通配符查询不起作用,可能是因为我使用InnoDB而不是MyISAM。LIKE和REGEXP有什么区别?
SELECT a.product_id, a.category_id FROM products a LEFT JOIN users u ON u.userid=a.ownerid
WHERE a.active=1 AND a.approved=1
AND a.deleted=0 AND a.name LIKE '%*my*%'
AND a.name LIKE '%*donuts*%'
AND (a.name REGEXP '()*(*my*)*()*(*donuts*)()*')
无论何时使用单词而不是通配符,它都可以正常工作,但这不是问题。
我只是想知道,是真正需要的已经做了
LIKE '%*my*%' AND a.name LIKE '%*donuts*%'
有什么区别后
(a.name REGEXP '()*(*my*)*()*(*donuts*)()*')
的一部分吗?
回答:
有什么区别?
正则表达式
(a.name REGEXP '()*(*my*)*()*(*donuts*)()*')
这之后立即产生一个错误,因为一个量词(例如未转义
*
字符)是无效的,在一个组的开始(即未转义的(
字符)。忽略了两次,其中发生产量:(a.name REGEXP '()*(my*)*()*(donuts*)()*')
此任何
a.name
与匹配:- 零或多个空格,随后
零个或多个的:
- 字母
m
,后面跟着 - 零个或多个字母
y
随后
- 字母
- 零或多个空格,随后
- 字符序列
donut
,随后 - 零或多个字母
s
,随后 - 零或更多空间
简单图案
a.name LIKE '%*my*%' AND a.name LIKE '%*donuts*%'
这个匹配
a.name
用:- 任何字符序列,随后
- 字符序列
*my*
,随后 - 任何字符序列
和用:
- 任何字符序列,随后
- 字符序列
*donuts*
,随后 - 任何字符序列
以上是 LIKE和REGEXP有什么区别? 的全部内容, 来源链接: utcz.com/qa/266498.html