正規表示式 MySQL搜尋過濾

2022-06-10 04:06:08 字數 1863 閱讀 3019

在資料庫的資料過濾過程中只用where子句和like操作符都是對於已知值進行的

不管是匹配乙個還是多個值,測試大於還是小於已知值,或者檢查某個範圍的值,都是使用已知的值

當然mysql語句也提供了萬用字元百分號(%)和下劃線(_)來匹配多個和單個字元

在檢索名中包含某些文字或字元的字段時確實很有用,但是這種功能也是有代價的

因為萬用字元和搜尋的處理一般要比有些搜尋所花時間要長,而且會使where子句本身過於複雜

這也就是正規表示式變得有用的地方,所有程式語言、文字編輯器、作業系統等都支援正規表示式

正規表示式是用來匹配文字的特殊串,用正規表示式語言來建立,所以這也是你必須所學習的特殊語法和指令

全文閱讀和自己練習嘗試需要大概十五分鐘左右,熟練運用sql語句中還得需要你自己不斷地積累和使用,希望不會浪費讀者寶貴的時間

雖然萬用字元搜尋處理要比其他搜尋時間所花時間要長,但是在資料量不大的時候還是建議使用的

這裡在講正規表示式之前還是先給出一些使用萬用字元要記住的技巧:

1. 不要過度使用萬用字元。如果其他操作符能達到相同的目的,應該使用其他操作符

2. 除非絕對必要,否則不要把他們用在搜尋模式的開始處。這樣搜尋起來是最慢的

3. 仔細注意萬用字元的位置。如果放錯地方,可能不會返回想要的資料

我們從乙個簡單的例子開始,下面檢索列name帶文字aba的部分行

這裡我們先提乙個問題,正規表示式和萬用字元匹配區分大小寫嗎?仔細觀察下面檢索的物件,你就知道答案了

這我們看到關鍵字regexp宣告後面的東西作為正規表示式處理,就得到了所有name列包含aba文字的資料,而且你也發現它們是不區分大小寫的

這時候你可能就要問,為什麼要那麼費力使用正規表示式?在剛才的例子中,沒有體現出帶來的好處,還可能降低效能,也確實沒有以下萬用字元的方法簡單

select *

from city

where name like '%aba%'

order by name

limit 10;

接下來,請考慮接下來的這些例子

這裡使用了正規表示式.east。.是正規表示式中的乙個特殊字元,表示匹配任意乙個字元

|是正規表示式的or操作,它表示匹配其中之一,多個or條件可以併入單個正規表示式。

從這裡開始終於開始有屬於正規表示式自己獨有的匹配方式了

這裡大家應該就有些看不懂這有些複雜的正規表示式了,所以接下來介紹所有正規表示式的其他語法
識別符號$ :和^相反,這是文字結尾的識別符號

匹配特殊字元

多數正規表示式都是用單反斜槓轉義,而mysql要求兩個是因為自己解釋乙個,正則表達庫解釋另乙個

匹配字元類

匹配多個例項

以上基本就是常用到的mysql正規表示式語法了,如果說你還沒有合適的表來做練習,這裡還有乙個簡單的測試方法
select 'hello' regexp '[0-9]'
regexp檢查總是返回0(沒有匹配)或者1(匹配),所以顯然這個語句的答案是返回0

總結下來你會發現,regexp和like的不同在於,like匹配整個串,而regexp匹配子串

正規表示式涉及的範圍是很廣的,本人在自學linux的bash程式設計時也是常常用到它,所以這是你必須掌握的技能

MySql萬用字元過濾,正規表示式過濾

百分號萬用字元 在搜尋串中,表示任意字元出現的任何次數。1 找出所有以jet開頭的產品 select prod name,prod price from products where prod name like jet 2 匹配任何位置包含文字anvil的值 select prod name,pr...

mysql正規表示式 MySQL正規表示式

正規表示式是為複雜搜尋指定模式的強大方式。正規表示式描述了一組字串。最簡單的正規表示式是不含任何特殊字元的正規表示式。例如,正規表示式hello匹配hello。非平凡的正規表示式採用了特殊的特定結構,從而使得它們能夠與1個以上的字串匹配。例如,正規表示式hello word匹配字串hello或字串w...

mysql 使用正規表示式搜尋

mysql僅僅支援正規表示式的乙個很小的子集 檢索prob name包含文字四位數字且數字末尾是 000 的所有行 select prob name from products where prob name regexp 000 order by prob name 這個例子可以用like來完成,...