我现在正在学习MySQL。我需要你帮助理解这些查询之间的区别:
select id from tab where id like '000';
select id from tab where id regex '000';
我现在正在学习MySQL。我需要你帮助理解这些查询之间的区别:
select id from tab where id like '000';
select id from tab where id regex '000';
您的第一个查询使用 like
运算符但不使用任何通配符。所以它相当于:
select id from tab where id = '000';
只列出那些 id
在哪里 id
是 000
。
第二个查询使用 regex
运算符,它列出行在哪里 id
具有 000
随地 在里面。
例: 它会列出这些 id
的: 1000
,2000
,000
,0001
要使您的第一个查询行为像第二个查询,您将不得不使用外卡 %
匹配零个或多个字符:
select id from tab where id like '%000%';
要让你的第二个查询像拳头一样,你必须使用start anchor(^
)和结束锚($
):
select id from tab where id regex '^000$';
您的第一个查询使用 like
运算符但不使用任何通配符。所以它相当于:
select id from tab where id = '000';
只列出那些 id
在哪里 id
是 000
。
第二个查询使用 regex
运算符,它列出行在哪里 id
具有 000
随地 在里面。
例: 它会列出这些 id
的: 1000
,2000
,000
,0001
要使您的第一个查询行为像第二个查询,您将不得不使用外卡 %
匹配零个或多个字符:
select id from tab where id like '%000%';
要让你的第二个查询像拳头一样,你必须使用start anchor(^
)和结束锚($
):
select id from tab where id regex '^000$';
万一你的第一个陈述是:
select id from tab where id like '%000%';
这意味着:任何东西(或什么都没有),然后是'000',然后是任何东西(或什么都没有)。
这恰好是什么 id regex '000'
确实。
基本上, LIKE
做非常简单的通配符匹配,和 REGEX
能够进行非常复杂的通配符匹配。
事实上,正则表达式(REGEX
)他们是如此有能力,他们[1]自己整个研究[2]一个简单的方法来介绍非常微妙的错误。玩的开心。
该 喜欢 运算符允许使用。指定通配符 % 运营商。
例如,如果您需要指定以该字符开头的所有单词 一个,您可以使用该值来完成此操作 “一个%”。您还可以指定单词 结尾 用一串字符。例如。以...结尾的单词 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 运营商。