sql標準模式匹配:
在sql標準模式匹配中,使用「_」匹配任何單個字元,而「%」匹配任意數目字元(包括零字元)。注意使用sql匹配模式時,不能使用=或!=;而應使用like或not like比較操作符。
找出以「b」開頭的名字:
mysql>
select
* from
goods
where
goodsname
like
'b%'
; 找出以「fy」結尾的名字:
mysql>
select
* from
goods
where
goodsname
like
'%fy'
; 找出包含「w」的名字:
mysql>
select
* from
goods
where
goodsname
like
'%w%'
; 找出正好包含5個字元的名字,使用「_」模式字元:
mysql>
select
* from
goods
where
goodsname
like
'_____'
;sql擴充套件模式匹配:
mysql的另乙個匹配模式是使用擴充套件正規表示式。它們使用regexp和not regexp操作符(或rlike和not rlike,同義詞)。
擴充套件正規表示式的一些字元是:
1.『.』匹配任何單個的字元。
2.字元類「[...]」匹配在方括號內的任何字元。例如,「[abc]」匹配「a」、「b」或「c」。為了命名字元的範圍,使用乙個「-」。「[a-z]」匹配任何字母,而「[0-9]」匹配任何數字。
3.「 * 」匹配零個或多個在它前面的字元。例如,「x*」匹配任何數量的「x」字元,「[0-9]*」匹配任何數量的數字,而「.*」匹配任何數量的任何字元。
注意:(1) regexp模式匹配中,在值的區域性任何地方發現匹配,則表示成功匹配;這一點不同於like模式,只有與整個值匹配,才表示成功匹配。
(2)當要求被匹配值的開始與結尾進行完整匹配時,在表示式開始處使用「^」和在結尾用「$」。
就上面標準sql模式匹配的幾個案例,下面用擴充套件表示式的方式重寫:
為了找出以「b」開頭的名字,使用「^」匹配名字的開始:
mysql>
select
* from
goods
where
goodsname regexp
'^b'
; 如果你想強制使regexp比較區分大小寫,使用binary關鍵字使其中乙個字串變為二進位制字串。該查詢只匹配名稱首字母的小寫『b』。
mysql>
select
* from
goods
where
goodsname regexp
binary
'^b'
; 為了找出以「fy」結尾的名字,使用「$」匹配名字的結尾:
mysql>
select
* from
goods
where
goodsname regexp
'fy$'
; 為了找出包含乙個「w」的名字,使用以下查詢:
mysql>
select
* from
goods
where
goodsname regexp
'w';
為了找出包含正好5個字元的名字,使用「^」和「$」匹配名字的開始和結尾,和5個「.」例項在兩者之間:
mysql>
select
* from
pet
where
name
regexp
'^.....$'
; 也可以使用「」「重複n次」操作符重寫前面的查詢:
mysql>
select
* from
pet
where
name
regexp
'^.$'
;
MySQL對標準SQL的注釋擴充套件
之前一直不明白 mysql 注釋中的嘆號是什麼東西,直到看了下邊的 manual 文件中的內容。mysql 伺服器包含一些其他 sql dbms 中不具備的擴充套件。注意,如果使用了它們,將無法把 移植到其他 sql伺服器。在某些情況下,你可以編寫包含 mysql 擴充套件的 但仍保持其可移植性,方...
1 7 1 MySQL對標準SQL的擴充套件
mysql server支援某些您可能在其他sql dbms中找不到的擴充套件。請注意,如果使用它們,您的 將無法移植到其他sql server。在某些情況下,可以使用以下形式的注釋編寫包含mysql擴充套件但仍可移植的 在這種情況下,mysql伺服器將像其他任何sql語句一樣解析並執行注釋中的 但...
mysql 標準sql 久違的SQL標準
很久沒有什麼工作需要參考sql標準了,乃至於sql 2011的更新都一直沒有去關注過。sql標準一路走來,可以說是略顯老態了,參與的廠商比較少,關注的人也少了。絕大多數人提起sql標準,涉及的內容其實是sql89或sql92裡頭最基本或者說最核心的一部分。其實,自從 很久沒有什麼工作需要參考sql標...