sql正規表示式:sql中的正規表示式
sql的查詢語句中,有時會需要引進正規表示式為其複雜搜尋指定模式。下面給出一些
regexp
在mysql
語句中應用(非全部):1)
^匹配字串的開始部分。
mysql> select 'fo/nfo' regexp '^fo$'; -> 0mysql> select 'fofo' regexp '^fo'; -> 12)
$匹配字串的結束部分。
mysql> select 'fo/no' regexp '^fo/no$'; -> 1mysql> select 'fo/no' regexp '^fo$'; -> 03)
.匹配任何字元(包括回車和新行)。
mysql> select 'fofo' regexp '^f.*$'; -> 1mysql> select 'fo/r/nfo' regexp '^f.*$'; -> 14
)[:character_class:]
在括號表示式中(使用[和
]),[:character_class:]
表示與術語類的所有字元匹配的字元類。標準的類名稱是:
alnum
文字數字字元
alpha
文字字元
blank
空白字元
cntrl
控制字元
digit
數字字元
graph
圖形字元
lower
小寫文字字元
圖形或空格字元
punct
標點字元
space
空格、製表符、新行、和回車
upper
大寫文字字元
xdigit
十六進製制數字字元
它們代表在
ctype(3)
手冊頁面中定義的字元類。特定地區可能會提供其他類名。字元類不得用作範圍的端點。
mysql> select 'justalnums' regexp '[[:alnum:]]+'; -> 1
mysql> select '!!' regexp '[[:alnum:]]+'; -> 05)
[[:<:]], [[:>:]]
這些標記表示
word
邊界。它們分別與
word
的開始和結束匹配。
word
是一系列字字元,其前面和後面均沒有字
字元。字字元是
alnum
類中的字母數字字元或下劃線
(_)。
mysql> select 'a word a' regexp '[[:<:]]word[[:>:]]'; -> 1mysql> select 'a xword a' regexp
'[[:<:]]word[[:>:]]'; -> 0
要想在正規表示式中使用特殊字元的文字例項,應在其前面加上
2個反斜槓
「/」字元。
mysql
解析程式負責解釋其中乙個,正規表示式庫負責解釋另乙個。例如,要想與包含特殊字元
「+」的字元
串「1+2」
匹配,在下面的正規表示式中,只有最後乙個是正確的:
mysql> select '1+2' regexp '1+2'; -> 0mysql> select '1+2' regexp '1/+2'; -> 0mysql> select
'1+2' regexp '1//+2'; -> 1
其他的有關
regexp
的語法,可直接參考下表:字元
含意/
做為轉意,即通常在
"/"後面的字元不按原來意**釋,如
/b/匹配字元
"b",當
b前面加了反斜桿後
//b/
,轉意為匹配乙個單詞的邊界。-或
-對正規表示式功能字元的還原,如
"*"匹配它前面元字元
0次或多次,
/a*/
將匹配a,aa,aaa
,加了"/"
後,/a/*/
將只匹配
"a*"。^
匹配乙個輸入或一行的開頭,
/^a/
匹配"an a"
,而不匹配
"an a"
$ 匹配乙個輸入或一行的結尾,
/a$/
匹配"an a"
,而不匹配
"an a"
* 匹配前面元字元
0次或多次,
/ba*/
將匹配b,ba,baa,baaa
+ 匹配前面元字元
1次或多次,
/ba*/
將匹配ba,baa,baaa
? 匹配前面元字元0次或
1次,/ba*/
將匹配b,ba
(x) 匹配x
儲存x在名為$1...$9
的變數中
x|y 匹配x
或y精確匹配n次
匹配n次以上 匹配
n-m次
[xyz]
字符集(character set)
,匹配這個集合中的任一乙個字元
(或元字元
)[^xyz]
不匹配這個集合中的任何乙個字元
[/b]
匹配乙個退格符
/b 匹配乙個單詞的邊界
/b 匹配乙個單詞的非邊界
/cx
這兒,x
是乙個控制符,
//cm/
匹配ctrl-m
/d 匹配乙個字數字元,
//d/ = /[0-9]/
/d 匹配乙個非字數字元,
//d/ = /[^0-9]/
/n 匹配乙個換行符
/r 匹配乙個回車符
/s 匹配乙個空白字元,包括
/n,/r,/f,/t,/v
等/s
匹配乙個非空白字元,等於
/[^/n/f/r/t/v]/
/t 匹配乙個製表符
/v 匹配乙個重直製表符
/w 匹配乙個可以組成單詞的字元
(alphanumeric
,這是我的意譯,含數字
),包括下劃線,如
[/w]
匹配"$5.98"中的5
,等於[a-za-z0-9]
/w 匹配乙個不可以組成單詞的字元,如
[/w]
匹配"$5.98"中的$
,等於[^a-za-z0-9]。1
、smallint
型別字段
gender限定0
和1:gender<=1 2
、int
型別字段
age限定範圍
: age > 10 and age < 100 3
、varchar
型別字段限定範圍:
·限定長度為
1且只能為字母的字串
flagcode
:flagcode like '[a-z]' ·6
位數字郵編
zipcode
:zipcode like '[0-9][0-9][0-9][0-9][0-9][0-9]' 4
、使用者名稱
username
必須以使用者序號
userid
打頭:left(username,len(userid))=userid
SQL 正規表示式
由mysql提供的模式匹配的其他型別是使用擴充套件正規表示式。當你對這類模式進行匹配測試時,使用regexp和not regexp操作符 或rlike和not rlike,它們是同義詞 擴充套件正規表示式的一些字元是 匹配任何單個的字元。乙個字元類 匹配在方括號內的任何字元。例如,abc 匹配 a ...
SQL正規表示式
當我們要進行一些簡單的糊塗查詢時用百分號 萬用字元 就可以了.其中 表達任意長度的字串,表示任意的某乙個字元.比如select from emp where ename like s or ename like s 但如果在一些複雜的查詢中關用這兩個符號sql語句就會非常複雜,而且也不一定能實現.從...
SQL正規表示式
例子 1 查詢名字包含 天 字的人的資訊 select from user where user name like 天 等同於 select from user where user name regexp 天 2 查詢user表中,姓名最後乙個字是 宇 的人的資訊 select from use...