like 和正则表达式运算符之间的区别

发布于 2024-09-30 06:24:39 字数 148 浏览 6 评论 0原文

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

select id from tab where id like '000';

select id from tab where id regex '000';

I'm learning MySQL now. I need your help in understanding the difference between these queries:

select id from tab where id like '000';

select id from tab where id regex '000';

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一袭水袖舞倾城 2024-10-07 06:24:40

以防万一您的意思是第一个语句是:

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

这意味着:任何内容(或什么都没有),后跟“000”,然后是任何内容(或什么都没有)。

这正是 id regex '000' 所做的。

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

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

Just in case you meant the first statement to be:

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

That means: anything (or nothing), followed by '000', followed by anything (or nothing).

This happens to be just what id regex '000' does.

Basically, LIKE does very simple wildcard matches, and REGEX is capable of very complicated wildcard matches.

In fact, regular expressions (REGEX) are so capable that they are [1] a whole study in themselves [2] an easy way to introduce very subtle bugs. Have fun.

辞慾 2024-10-07 06:24:40

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

例如,如果您需要指定以字符 a 开头的所有单词,则可以使用值 "a%" 来实现。您还可以指定以字符串结尾的单词。例如,可以使用 "%ing" 来指定以 ing 结尾的单词。

您还可以使用参数来指定包含特定字符串的值的列。例如,包含字符 fish 的单词可以使用类似参数 "%fish%" Regexp 指定

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

例如从电话簿中选择*,其中电话 REGEXP "[[:digit:]]{3}\-[[:digit: ]]{3}\-[[:digit:]]{4}"

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

The like operator allows for specifying wildcards using the % operator.

If for instance you need to specify all words starting with the character a, you can do so by using the value "a%". You could also specify words ending with a string of characters. E.g. words ending with ing can be specified using "%ing"

You could also have parameters specifying columns containing values that contain a certain string. E.g. words that contain the characters fish can be specified using the like parameter "%fish%"

Regexp (I don't think there's a regex operator) on the other hand allows you to specify regular expression in comparing values in a column with a parameter. For instance, if you need to retrieve all records that match a phone number in the format 555-666-7777 you can use the parameter "[[:digit:]]{3}\-[[:digit:]]{3}\-[[:digit:]]{4}"

E.g. SELECT * FROM phonebook WHERE phone REGEXP "[[:digit:]]{3}\-[[:digit:]]{3}\-[[:digit:]]{4}"

Please see http://dev.mysql.com/doc/refman/5.1/en/regexp.html for more information on the REGEXP operator.

轻拂→两袖风尘 2024-10-07 06:24:39

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

select id from tab where id = '000';

仅列出 idid,其中 id000

第二个查询使用 regex 运算符,它列出 id 中包含 000 anywhere 的行。

示例:它将列出这些id10002000000,0001

要使第一个查询的行为类似于第二个查询,您必须使用通配符 % 来匹配零个或多个字符:

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

要使第二个查询的行为类似于首先,您必须使用开始锚点(^)和结束锚点($):

select id from tab where id regex '^000
;

Your first query uses like operator but does not use any wildcards. So it's equivalent to:

select id from tab where id = '000';

which lists only those id's where id is 000.

The second query uses regex operator and it lists rows where id has 000 anywhere in it.

Example: It'll list these id's: 1000,2000,000,0001

To make your first query behave like the second you'll have to use wild card % which matches zero or more characters:

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

To make your second query behave like the fist you'll have to use start anchor(^) and end anchor($):

select id from tab where id regex '^000
;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文