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与匹配:

    1. 零或多个空格,随后
    2. 零个或多个的:

      • 字母m,后面跟着
      • 零个或多个字母y

      随后

    3. 零或多个空格,随后
    4. 字符序列donut,随后
    5. 零或多个字母s,随后
    6. 零或更多空间

     

  • 简单图案

    a.name LIKE '%*my*%' AND a.name LIKE '%*donuts*%' 

    这个匹配a.name用:

    1. 任何字符序列,随后
    2. 字符序列*my*,随后
    3. 任何字符序列

    和用:

  • 任何字符序列,随后
  • 字符序列*donuts*,随后
  • 任何字符序列

以上是 LIKE和REGEXP有什么区别? 的全部内容, 来源链接: utcz.com/qa/266498.html

回到顶部