中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

MySQL中正則表達式如何使用

發布時間:2022-07-06 11:55:49 來源:億速云 閱讀:166 作者:iii 欄目:開發技術

這篇“MySQL中正則表達式如何使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MySQL中正則表達式如何使用”文章吧。

前言

有時候使用MySQL進行數據庫查詢數據的時候,like查詢存在局限性,這時候就可以使用MySQL中的正則表達式查詢的方式。

正則表達式是用來匹配文本的特殊的串(字符集合),將一個模式(正則表達式)與一個文本串進行比較。

  • 從文本文件中提取電話號碼

  • 查找名字中間帶有數字的文件

  • 文本塊中重復出現的單詞

  • 替換頁面的URL為這些URL的實際鏈接(一個或兩個正則表達式)

LIKE和REGEXP的區別

LIKE匹配整個列(like是模糊查詢),如果被匹配的文本僅在列值中出現,LIKE并不會找到它,相應的行也不會返回(當然,使用通配符除外)
REGEXP在列值內進行匹配,如果被匹配的匹配的文本在列值中出現,REGEXP將會找到它,相應的行將被返回,這時一個非常重要的差別(當然,如果適應定位符號^和$,可以實現REGEXP匹配整個列而不是列的子集)

例如:

查詢一個表name列含有chen字符串的數據,兩條sql語句如下

select * from stu_info where name like '小白';
select * from stu_info where name regexp '小白';

第一條的查詢結果是name值等于’小白‘的數據,而第二條的查詢結果是name中包含’小白’的數據,也可以用like(模糊查詢+通配符)來實現regexp查詢結果。

OR進行匹配

select column from table where column regexp 'X|Y' order by column;
select column from table where column regexp '[XY]test' order by column;

第一種寫法會將|應用于整個串,只要字符串中有X或Y的數據,都將被檢索出來

第二種寫法只將[XY]應用于搜索模式的開頭處

匹配范圍

([])集合可以用來定義要匹配的一個或多個字符,比如[0123456789],為了簡化這種類型的集合,可使用(-)來定義一個范圍,即[0-9],[a-z]

匹配特殊字符

則表達式由具有特定含義的特殊字符構成;如果要匹配這些特殊字符,就需要用\為前導,這種處理方式就是所謂的轉義(escaping),正則表達式內具有特殊意義的所有字符都必須以這種方式轉義;(為了匹配反斜杠{}字符本身,需要使用\\)

注意:多數正則表達式實現使用單個反斜杠轉義特殊字符,以便能夠使用這些字符本身,而MySQL要求兩個反斜杠(MySQL自己解釋一個,正則表達式庫解釋一個)

MySQL中正則表達式如何使用

匹配字符類

有時候需要檢索出我們需要的數字、所有字母字符或所有數字字母字符等的匹配,我們可以使用預定義的字符集,稱為字符類。

MySQL中正則表達式如何使用

匹配多個實例

有時候需要對匹配的數目進行更強的控制,比如:尋找所有的數,不管數中包含多少數字,或尋找一個單詞并尾隨一個s(如果存在)等情況,我們可以利用正則表達式中的重復元字符來完成。

MySQL中正則表達式如何使用

select column from table where column regexp '\\([0-9] sticks?\\)' order by column;

上面的正則表達式‘\([0-9] sticks?\)’意為:\匹配([0-9]匹配任意數字,這里指匹配的數值范圍,sticks?匹配stick和sticks{?使s可選,因為?匹配它前面任何字符的0或者1次出現})。

定位符

有時候為了匹配特定位置的文本,需要使用定位符,常用定位符列表如下:

MySQL中正則表達式如何使用

找出一個以一個數(包括小數點開始的數)開始的所有數值,簡單搜索[0-9\.]或([[:digit:]\.])不行,因為它將在文本內任意位置查找匹配,可以使用^定位符,如下:

select column from table where column regexp '^[0-9\\.]' order by column;

^有兩種用法

  • 在集合中(用[和]定義),用它來否定該集合

  • 用來指串的開始處

使regexp和like起相同作用:like匹配整串二regexp匹配子串,可以利用定位符,用^開始每個表達式,用$結束每個表達式,就可以使regexp和like作用一樣。

查詢admin表中的group字段,數據格式為:1,2,3;4,5,6;1,87,101

例如查詢101:

select * from xin_admin where `group` REGEXP '[,|;]?101[,|;]?';

附:Mysql字符串截取 和 截取字符進行查詢

一、MySQL中字符串的截取

MySQL中有專門的字符串截取函數:其中常用的有兩種:substring_index(str,delim,count) 和concat

1.substring_index(str,delim,count) 函數的使用較為普遍。

函數括號里面的依次為:要分隔截取的字符串(如:”aaa_bbb_ccc”)、分隔符(如:“_”)、位置(表示第幾個分隔符處,如:“1”)。

  • count為正數,那么就是從左邊開始數,函數返回第count個分隔符的左側的字符串;

  • count為負數,那么就是從右邊開始數,函數返回第count個分隔符右邊的所有內容;

  • count可以為0,返回為空。

例子:substring_index("aaa_bbb_ccc","_",1) ,返回為 aaa;
         substring_index("aaa_bbb_ccc","_",2) ,返回為 aaa_bbb;
         substring_index(substring_index("aaa_bbb_ccc","_",-2),"_",1) ,返回為 bbb;

2.concat是連接幾個字符串

例子:concat(‘m’,’y’,’s’,’q’,’l’);

返回:mysql

二、依據表中的某個字段查詢包含有這個字符的所有數據

1.find_in_set:SELECT * FROM user WHERE find_in_set(‘吳’,name);

查詢user表中所有name包含“吳”的數據

2.REGEXP:SELECT * FROM user WHERE name REGEXP ‘(‘吳’|‘劉’)’;

使用正則,查詢包含劉或者吳的數據

以上就是關于“MySQL中正則表達式如何使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

印江| 丰城市| 驻马店市| 江永县| 武冈市| 泸州市| 怀远县| 上犹县| 科技| 雅江县| 池州市| 青铜峡市| 饶平县| 华亭县| 黄山市| 井研县| 仁布县| 库伦旗| 从江县| 高清| 深州市| 大同县| 松原市| 礼泉县| 介休市| 边坝县| 双柏县| 四平市| 石林| 黔西县| 密云县| 始兴县| 湖口县| 苏州市| 白玉县| 闸北区| 抚松县| 宜宾市| 渝北区| 彭阳县| 兴城市|