[英]What's the difference between '=' operator and LIKE when not using wildcards
[英]difference between like and regex operator
我現在正在學習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%';
要使您的第二個查詢行為像拳頭,您將不得不使用開始錨點( ^
)和結束錨點( $
):
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]是一種簡單的方法來引入非常微妙的錯誤。 玩得開心。
like運算符允許使用%運算符指定通配符。
例如,如果您需要指定以字符a開頭的所有單詞,則可以使用值“a%”來執行此操作 。 您還可以指定以字符串結尾的單詞。 例如,以ing結尾的單詞可以使用“%ing”指定
您還可以使用參數指定包含包含特定字符串的值的列。 例如,可以使用like參數“%fish%”指定包含字符fish的單詞
另一方面, Regexp (我認為沒有正則表達式運算符)允許您在比較列中的值和參數時指定正則表達式。 例如,如果您需要檢索與格式為555-666-7777的電話號碼匹配的所有記錄,則可以使用參數“[[:digit:]] {3} \\ - [[:digit:]] {3 } \\ - [[:位:]] {4}”
例如SELECT * FROM電話簿WHERE電話REGEXP“[[:digit:]] {3} \\ - [[:digit:]] {3} \\ - [[:digit:]] {4}”
有關REGEXP運算符的更多信息,請參閱http://dev.mysql.com/doc/refman/5.1/en/regexp.html 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.