sql正規表示式 SQL中的正規表示式

2021-05-22 02:38:12 字數 3775 閱讀 7115

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

小寫文字字元

print

圖形或空格字元

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...