我现在正在学习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
是000
的记录。
第二个查询使用了regex
运算符,它会列出id
中000
出现在任何位置的行。
例如:它会列出这些id
: 1000
、2000
、000
、0001
要使你的第一个查询像第二个一样运行,你需要使用通配符%
,匹配零个或多个字符:
select id from tab where id like '%000%';
为了使你的第二个查询与第一个查询行为相同,你需要使用起始锚点(^
)和结束锚点($
):select id from tab where id regex '^000$';
如果您的意思是第一条陈述:
select id from tab where id like '%000%';
id regex '000'
所做的事情。LIKE
只进行非常简单的通配符匹配,而REGEX
则能够进行非常复杂的通配符匹配。REGEX
)如此强大,以至于它们是[1]一个独立的研究领域[2]引入非常微妙的错误的简单方法。玩得开心。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运算符的信息。
...like '000%'
和...like '000_'
以及...regex '000[[:alnum:]]+'
,那么就会有所不同……你懂的 ;) - FrustratedWithFormsDesigner