簡體   English   中英

like和regex運算符之間的區別

[英]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的地方id000

第二個查詢使用regex運算符,它列出了id在其中任何位置000行。

例如:它會列出這些id的: 100020000000001

要使您的第一個查詢行為與第二個查詢相同,您必須使用匹配零個或多個字符的通配符%

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM