溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中如何使用正則表達(dá)式

發(fā)布時間:2021-11-24 10:25:42 來源:億速云 閱讀:145 作者:柒染 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)MySQL中如何使用正則表達(dá)式,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

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)行比較,可以校驗(yà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

關(guān)于MySQL中如何使用正則表達(dá)式就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI