like和regex运算符之间的区别

时间:2010-11-02 14:26:48

标签: mysql sql regex sql-like

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

select id from tab where id like '000';

select id from tab where id regex '000';

3 个答案:

答案 0 :(得分:12)

您的第一个查询使用like运算符,但不使用任何通配符。所以它相当于:

select id from tab where id = '000';

仅列出id id000的{​​{1}}。

第二个查询使用regex运算符,它会列出id000 的行

示例:它会列出这些id100020000000001

要使您的第一个查询行为与第二个查询相同,您必须使用匹配零个或多个字符的通配符%

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

要让您的第二个查询表现得像拳头,您将不得不使用起始锚点(^)和结束锚点($):

select id from tab where id regex '^000$';

答案 1 :(得分:3)

以防万一你的第一个陈述是:

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

这意味着:任何东西(或什么都没有),然后是'000',后跟任何东西(或什么都没有)。

这恰好是id regex '000'所做的。

基本上,LIKE执行非常简单的通配符匹配,REGEX能够进行非常复杂的通配符匹配。

事实上,正则表达式(REGEX)是如此强大,以至于它们本身就是一个完整的研究[2],这是一种引入非常微妙的错误的简单方法。玩得开心。

答案 2 :(得分:1)

like 运算符允许使用运算符指定通配符。

例如,如果您需要指定以字符 a 开头的所有字词,则可以使用值“a%”来执行此操作。您还可以使用字符串指定单词结尾。例如。可以使用“%ing”指定以 ing 结尾的字词

您还可以使用参数指定包含包含特定字符串的值的列。例如。可以使用like参数“%fish%”

指定包含字符 fish 的字词 另一方面,

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

E.g。 SELECT * FROM电话簿WHERE电话REGEXP“[[:数字:]] {3} \ - [[:数字:]] {3} \ - [[:数字:]] {4}”

有关 REGEXP 运算符的详情,请参阅http://dev.mysql.com/doc/refman/5.1/en/regexp.html