MySQL中使用正則表達(dá)式詳情
1、簡介
MySQL
中支持正則表達(dá)式匹配,在復(fù)雜的過濾條件中,可以考慮使用正則表達(dá)式。使用正則表達(dá)式需要掌握一些正則表達(dá)式的語法和指令,小捌推薦一個學(xué)習(xí)地址和在線工具,在學(xué)習(xí)MySQL
中使用正則表達(dá)式之前,去了解一下正則表達(dá)式的語法和指令。
正則表達(dá)式學(xué)習(xí)網(wǎng)址:
www.runoob.com/regexp/rege…
正則表達(dá)式在線測試:
c.runoob.com/front-end/8…
值得注意的是,MySQL
支持的正則表達(dá)式僅僅是正則表達(dá)式眾多實(shí)現(xiàn)的一個子集,在使用正則表達(dá)式之前,建議先測試一下。 測試的時候不一定要先建立表、插入數(shù)據(jù),可以直接使用select省略form子句,以簡便的方式處理表達(dá)式,
比如如下方式:
mysql> select '我愛你中國' regexp '我愛你'; +------------------------------+ | '我愛你中國' regexp '我愛你' | +------------------------------+ |1 | +------------------------------+
mysql> select '12306' regexp '[:digit:]'; +----------------------------+ | '12306' regexp '[:digit:]' | +----------------------------+ | 1 | +----------------------------+
2、準(zhǔn)備一張product表
首先準(zhǔn)備一張product
表,DDL和表數(shù)據(jù)如下所示,可以直接復(fù)制使用。
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for product -- ---------------------------- DROP TABLE IF EXISTS `product`; CREATE TABLE `product` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '產(chǎn)品名稱', `price` decimal(10, 2) UNSIGNED NOT NULL COMMENT '產(chǎn)品價格', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of product -- ---------------------------- INSERT INTO `product` VALUES (1, 'Apple iPhone 13 (A2634)', 6799.00); INSERT INTO `product` VALUES (2, 'HUAWEI P50 Pro', 6488.00); INSERT INTO `product` VALUES (3, 'MIX4', 4999.00); INSERT INTO `product` VALUES (4, 'OPPO Find X3', 3999.00); INSERT INTO `product` VALUES (5, 'vivo X70 Pro+', 5999.00); SET FOREIGN_KEY_CHECKS = 1;
初始數(shù)據(jù)如下所示:
mysql> select * from product; +----+-------------------------+---------+ | id | product_name | price | +----+-------------------------+---------+ | 1 | Apple iPhone 13 (A2634) | 6799.00 | | 2 | HUAWEI P50 Pro | 6488.00 | | 3 | MIX4 | 4999.00 | | 4 | OPPO Find X3 | 3999.00 | | 5 | vivo X70 Pro+ | 5999.00 | +----+-------------------------+---------+
2.1 語句順序
正則表達(dá)式的作用是文本匹配,使用一個正則表達(dá)式與一個文本內(nèi)容進(jìn)行比較,可以校驗文本是否符合正則表達(dá)式闡述的規(guī)則。在MySQL
中,正則表達(dá)式用在where
子句中,可以對select
查詢的數(shù)據(jù)進(jìn)行過濾。
select * from table_name where regexp
'你的正則表達(dá)式' order by cloumn_name
;
需求:
查詢產(chǎn)品表中,產(chǎn)品名稱中包含3的產(chǎn)品
語句:
mysql> select * from product where product_name regexp '3';
結(jié)果:
+----+-------------------------+---------+ | id | product_name | price | +----+-------------------------+---------+ | 1 | Apple iPhone 13 (A2634) | 6799.00 | | 4 | OPPO Find X3 | 3999.00 | +----+-------------------------+---------+
2.2 如何區(qū)分大小寫
MySQL
使用正則表達(dá)式默認(rèn)不區(qū)分大小寫,但是大部分情況下我們需要明確英文的大小寫進(jìn)行匹配,這個時候我們可以使用binary
關(guān)鍵字。
需求:
查詢產(chǎn)品表中,產(chǎn)品名稱包含huawei的產(chǎn)品
語句:
mysql> select * from product where product_name regexp 'huawei';
結(jié)果:
+----+----------------+---------+ | id | product_name | price | +----+----------------+---------+ | 2 | HUAWEI P50 Pro | 6488.00 | +----+----------------+---------+
此時查詢結(jié)果默認(rèn)不區(qū)分大小寫,所以可以直接查詢出來,如果我們希望查詢區(qū)分大小寫,此時只需要在regexp
后面加上binary
關(guān)鍵字即可。
語句:
mysql> select * from product where product_name regexp binary 'huawei';
結(jié)果:
Empty set (0.00 sec)
由于product
表中并沒有包含小寫huawei
的產(chǎn)品,所以返回結(jié)果為Empty set
2.3 正則表達(dá)式與like的區(qū)別
相信有些小伙伴發(fā)現(xiàn)上面實(shí)現(xiàn)的功能,其實(shí)用like也能實(shí)現(xiàn)。很多場景下我們使用like來對字符串進(jìn)行匹配,但是這些場景往往非常簡單,而正則表達(dá)式是一個非常強(qiáng)大的文本檢索過濾工具,它的所能實(shí)現(xiàn)的功能比like操作符強(qiáng)大太多啦??傊甽ike能做的正則表達(dá)式都能做,正則表示能做的like基本上做不了(要么非常棘手)。
比如如下需求,使用正則表達(dá)式可以輕松實(shí)現(xiàn),但是like操作符卻不知道怎么實(shí)現(xiàn)了。
需求:
查詢產(chǎn)品表中,產(chǎn)品名稱中v至少出現(xiàn)一次產(chǎn)品信息
語句:
mysql> select * from product where product_name regexp 'v+';
結(jié)果:
+----+---------------+---------+ | id | product_name | price | +----+---------------+---------+ | 5 | vivo X70 Pro+ | 5999.00 | +----+---------------+---------+
注意:正則表達(dá)式重復(fù)元字符的匹配都是整個連續(xù)出現(xiàn)。下面給出這幾個重復(fù)元字符,感覺有些小伙伴會理解錯。
重復(fù)元字符
元字符 | 說明 |
---|---|
* | 0個或多個匹配,效果與{0,}一致 |
+ | 1個或多個匹配,效果與{1,}一致 |
? | 1個或0匹配,效果與{0,1}一致 |
{n} | 等于n個匹配數(shù)目 |
{n,} | 大于等于n個匹配 |
{n,m} | 大于等于n小于等于m個,m<255 |
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。