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*
,随后 - 任何字符序列
+0
这是非常详细的,非常有意义,谢谢:) – user1227914
''()*(* my *)*()*(* donuts *)()*'' - 这是非常奇怪的正则表达式。我敢打赌,这个表达式的作者不知道如何编写正则表达式 – zerkms
“我有一个不能正常工作的mySQL通配符查询,因为我使用的是InnoDB而不是MyISAM。” ---不,它不起作用,因为'LIKE'和'REGEX'表达式组成不正确 – zerkms
你可能会更好地告诉我们你的目标(例如你在找什么)并询问如何做到这一点,因为我不太清楚上面是否有你认为它的作用... – Nanne