问题 like和regex运算符之间的区别


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

select id from tab where id like '000';

select id from tab where id regex '000';

6453
2017-11-02 14:26


起源



答案:


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

select id from tab where id = '000';

只列出那些 id在哪里 id 是 000

第二个查询使用 regex 运算符,它列出行在哪里 id 具有 000  随地 在里面。

例: 它会列出这些 id的: 100020000000001

要使您的第一个查询行为像第二个查询,您将不得不使用外卡 % 匹配零个或多个字符:

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

要让你的第二个查询像拳头一样,你必须使用start anchor(^)和结束锚($):

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

12
2017-11-02 14:28



加上这个:那里 将 如果你的疑问是差异 ...like '000%' 和 '...like '000_' 和 ...regex '000[[:alnum:]]+' 并且......你会明白的;) - FrustratedWithFormsDesigner


答案:


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

select id from tab where id = '000';

只列出那些 id在哪里 id 是 000

第二个查询使用 regex 运算符,它列出行在哪里 id 具有 000  随地 在里面。

例: 它会列出这些 id的: 100020000000001

要使您的第一个查询行为像第二个查询,您将不得不使用外卡 % 匹配零个或多个字符:

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

要让你的第二个查询像拳头一样,你必须使用start anchor(^)和结束锚($):

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

12
2017-11-02 14:28



加上这个:那里 将 如果你的疑问是差异 ...like '000%' 和 '...like '000_' 和 ...regex '000[[:alnum:]]+' 并且......你会明白的;) - FrustratedWithFormsDesigner


万一你的第一个陈述是:

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

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

这恰好是什么 id regex '000' 确实。

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

事实上,正则表达式(REGEX)他们是如此有能力,他们[1]自己整个研究[2]一个简单的方法来介绍非常微妙的错误。玩的开心。


3
2017-11-02 14:38





喜欢 运算符允许使用。指定通配符  运营商。

例如,如果您需要指定以该字符开头的所有单词 一个,您可以使用该值来完成此操作 “一个%”。您还可以指定单词 结尾 用一串字符。例如。以...结尾的单词 ING 可以使用指定 “ING%”

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

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

例如。 SELECT * FROM电话簿WHERE电话REGEXP“[[:digit:]] {3} \ - [[:digit:]] {3} \ - [[:digit:]] {4}”

请参见 http://dev.mysql.com/doc/refman/5.1/en/regexp.html 有关的更多信息 REGEXP 运营商。


1
2017-11-02 14:55