"like"和"regex"运算符之间的区别是什么?

13

我现在正在学习MySQL。我需要你的帮助来理解以下查询之间的区别:

select id from tab where id like '000';

select id from tab where id regex '000';
3个回答

14

你的第一个查询使用了 like 运算符,但没有使用任何通配符。因此它相当于:

select id from tab where id = '000';

这个查询仅列出id000的记录。

第二个查询使用了regex运算符,它会列出id000出现在任何位置的行。

例如:它会列出这些id100020000000001

要使你的第一个查询像第二个一样运行,你需要使用通配符%,匹配零个或多个字符:

select id from tab where id like '%000%';
为了使你的第二个查询与第一个查询行为相同,你需要使用起始锚点(^)和结束锚点($):
select id from tab where id regex '^000$';

补充一点:如果你的查询是 ...like '000%'...like '000_' 以及 ...regex '000[[:alnum:]]+',那么就会有所不同……你懂的 ;) - FrustratedWithFormsDesigner

4

如果您的意思是第一条陈述:

select id from tab where id like '%000%';

那就是:任何东西(或什么都没有),后面跟着“000”,再跟着任何东西(或什么都没有)。
这恰好就是id regex '000'所做的事情。
基本上,LIKE只进行非常简单的通配符匹配,而REGEX则能够进行非常复杂的通配符匹配。
事实上,正则表达式(REGEX)如此强大,以至于它们是[1]一个独立的研究领域[2]引入非常微妙的错误的简单方法。玩得开心。

1

Like 运算符允许使用 % 运算符来指定通配符。

例如,如果您需要指定以字符 a 开头的所有单词,可以使用值 "a%"。您也可以指定以一系列字符结尾的单词。例如,以ing 结尾的单词可以使用 "%ing" 指定

您还可以有参数指定包含某个字符串的值的列。例如,包含字符fish的单词可以使用 like 参数 "%fish%" 指定

Regexp(我认为没有正则表达式运算符),另一方面,允许您在将列中的值与参数进行比较时指定正则表达式。例如,如果您需要检索与格式为 555-666-7777 的电话号码匹配的所有记录,则可以使用参数 "[[:digit:]]{3}\-[[:digit:]]{3}\-[[:digit:]]{4}"

例如:SELECT * FROM phonebook WHERE phone REGEXP "[[:digit:]]{3}\-[[:digit:]]{3}\-[[:digit:]]{4}"

请参见http://dev.mysql.com/doc/refman/5.1/en/regexp.html了解更多关于REGEXP运算符的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接