日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL 正则表达式 匹配方式

發(fā)布時間:2023/12/14 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL 正则表达式 匹配方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

執(zhí)行數(shù)據(jù)庫查詢時,有完整查詢和模糊查詢之分。
一般模糊語句如下:
SELECT 字段 FROM 表 WHERE 某字段 Like 條件

其中關(guān)于條件,SQL提供了四種匹配模式:
1、%:表示任意0個或多個字符。可匹配任意類型和長度的字符,有些情況下若是中文,請運用兩個百分號(%%)表示。
比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
將會把u_name為“張三”,“張貓三”、“三腳貓”,“唐三藏”等等有“三”的記錄全找出來。
另外,如果須要找出u_name中既有“三”又有“貓”的記錄,請運用 and條件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'
若運用 SELECT * FROM [user] WHERE u_name LIKE '%三%貓%'
雖然能搜索出“三腳貓”,但不能搜索出符合條件的“張貓三”。

2、_: 表示任意單個字符。匹配單個任意字符,它常用來限定表達式的字符長度語句:
比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”這樣u_name為三個字且中間一個字是“三”的;
再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三腳貓”這樣name為三個字且第一個字是“三”的;

3、[ ]:表示括號內(nèi)所列字符中的一個(類似正則表達式)。指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。
比如 SELECT * FROM [user] WHERE u_name LIKE '[張李王]三'
將找出“張三”、“李三”、“王三”(而不是“張李王三”);
如 [ ] 內(nèi)有一系列字符(01234、abcde之類的)則可略寫為“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
將找出“老1”、“老2”、……、“老9”;

4、[^ ] :表示不在括號所列之內(nèi)的單個字符。其取值和 [] 相同,但它要求所匹配對象為指定字符以外的任一個字符。
比如 SELECT * FROM [user] WHERE u_name LIKE '[^張李王]三'
將找出不姓“張”、“李”、“王”的“趙三”、“孫三”等;
SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
將排除“老1”到“老4”,尋找“老5”、“老6”、……

5、查詢內(nèi)容包含通配符時
由于通配符的緣故,導致我們查詢特殊字符“%”、“_”、“[”的語句不能正常實現(xiàn),而把特殊字符用“[ ]”括起便可正常查詢。據(jù)此我們寫出以下函數(shù):
function sqlencode(str)
str=replace(str,"[","[[]") '此句一定要在最前
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function
在查詢前將待查字符串先經(jīng)該函數(shù)處理即可。

?

?

由MySQL提供的模式匹配的其他類型是使用擴展正則表達式。

當你對這類模式進行匹配測試時,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它們是同義詞)。
擴展正則表達式的一些字符是:
“.”匹配任何單個的字符。
一個字符類“[...]”匹配在方括號內(nèi)的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。為了命名字符的一個范圍,使用一個“-”。“[a-z]”匹配任何小寫字母,而“[0-9]”匹配任何數(shù)字。
“ * ”匹配零個或多個在它前面的東西。例如,“x*”匹配任何數(shù)量的“x”字符,“[0-9]*”匹配的任何數(shù)量的數(shù)字,而“.*”匹配任何數(shù)量的任何東西。

正則表達式是區(qū)分大小寫的,但是如果你希望,你能使用一個字符類匹配兩種寫法。例如,“[aA]”匹配小寫或大寫的“a”而“[a-zA-Z]”匹配兩種寫法的任何字母。
如果它出現(xiàn)在被測試值的任何地方,模式就匹配(只要他們匹配整個值,SQL模式匹配)。
為了定位一個模式以便它必須匹配被測試值的開始或結(jié)尾,在模式開始處使用“^”或在模式的結(jié)尾用“$”
為了說明擴展正則表達式如何工作,上面所示的LIKE查詢在下面使用REGEXP重寫:
為了找出以“b”開頭的名字,使用“^”匹配名字的開始并且“[bB]”匹配小寫或大寫的“b”
mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
為了找出以“fy”結(jié)尾的名字,使用“$”匹配名字的結(jié)尾:
mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
為了找出包含一個“w”的名字,使用“[wW]”匹配小寫或大寫的“w”:
mysql> SELECT * FROM pet WHERE name?REGEXP "[wW]";
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
既然如果一個正規(guī)表達式出現(xiàn)在值的任何地方,其模式匹配了,就不必再先前的查詢中在模式的兩方面放置一個通配符以使得它匹配整個值,就像如果你使用了一個SQL模式那樣。
為了找出包含正好5個字符的名字,使用“^”和“$”匹配名字的開始和結(jié)尾,和5個“.”實例在兩者之間:
mysql> SELECT * FROM pet WHERE name REGEXP?"^.....$";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| hahah?| hahah?| cat | m | 1990-03-15 | NULL |
| Buffy | Harold | dog | f | 1989-05-20 | NULL |
+-------+--------+---------+------+------------+-------+
你也可以使用“{n}”“重復n次”操作符重寫先前的查詢:
mysql> SELECT * FROM pet WHERE name REGEXP?"^.{5}$";
+-------+--------+---------+------+------------+-------+
| name
| owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| hahah | hahah?| cat | m | 1990-03-15 | NULL |
| Buffy | Harold | dog | f | 1989-05-20 | NULL |
+-------+--------+---------+------+------------+-------+

總結(jié)

以上是生活随笔為你收集整理的SQL 正则表达式 匹配方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。