MySQL REGEXP_LIKE() 函數:初學者指南

你好,未來的數據庫大師!今天,我們將踏上一段令人興奮的旅程,進入 MySQL 的世界,並探索一個強大的函數——REGEXP_LIKE()。別擔心如果你從未寫過一行代碼——我將成為你的友好導遊,我們將一步步來。到了這個教程的結尾,你將能像專家一樣使用正則表達式!

MySQL - regexp_like() Function

REGEXP_LIKE() 是什麼?

在我們深入細節之前,讓我們先了解 REGEXP_LIKE() 是如何工作的。想像你是一名偵探,在一片文本海洋中尋找特定的模式。這正是 REGEXP_LIKE() 所做的——它使用所謂的正則表達式(簡稱 regex)在您的數據中尋找模式。

基础知識

REGEXP_LIKE() 是 MySQL 中的一個函數,如果字符串匹配正則表達式模式,則返回 1(真),如果不匹配,則返回 0(假)。這就像在問,“喂 MySQL,這段文本看起來像我要找的嗎?”

讓我們分解一下語法:

REGEXP_LIKE(expr, pattern[, match_type])
  • expr:這是你想要搜索的文本。
  • pattern:這是你尋找的正則表達式模式。
  • match_type:這是可選的,允許你指定你想如何匹配(區分大小寫、多行等)。

開始使用 REGEXP_LIKE()

你的第一個 REGEXP_LIKE() 查詢

讓我們從一個簡單的例子開始。假設我們有一個名為 books 的表,其中有一個列 title。我們想要找到所有標題中包含單詞 "SQL" 的書籍。

SELECT title
FROM books
WHERE REGEXP_LIKE(title, 'SQL');

這個查詢將返回所有包含 "SQL" 的書名,無論大小寫(SQL、sql、SqL 等)。

大小寫敏感性

如果我們想要更具體,只匹配大寫的 "SQL" 呢?我們可以使用 match_type 參數:

SELECT title
FROM books
WHERE REGEXP_LIKE(title, 'SQL', 'c');

這裡的 'c' 告訴 MySQL 進行區分大小寫的匹配。

高級模式匹配

現在我們已經略知一二,讓我們來探討一些更複雜的模式!

在字符串開頭或結尾匹配

要在字符串開頭匹配模式,使用 '^':

SELECT title
FROM books
WHERE REGEXP_LIKE(title, '^The');

這將找到所有以 "The" 開頭的書籍。

要在結尾匹配,使用 '$':

SELECT title
FROM books
WHERE REGEXP_LIKE(title, 'Edition$');

這會找到結尾為 "Edition" 的書籍。

匹配多個模式

想要找到關於 SQL 或 Python 的書籍?沒問題!

SELECT title
FROM books
WHERE REGEXP_LIKE(title, 'SQL|Python');

這裡的 '|' 在正則表達式中起到 "OR" 運算符的作用。

匹配字符範圍

讓我們說我們想要找到標題中包含數字的書籍:

SELECT title
FROM books
WHERE REGEXP_LIKE(title, '[0-9]');

這將匹配任何包含從 0 到 9 的數字的標題。

實際範例

範例 1:尋找電子郵件地址

想像你有一個 customers 表,並且想要驗證電子郵件地址:

SELECT email
FROM customers
WHERE REGEXP_LIKE(email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$');

這個複雜的模式檢查有效的電子郵件格式。讓我們分解一下:

  • ^[A-Za-z0-9._%+-]+:開始於一個或多個字母、數字或特定符號
  • @:跟著一個 @ 符號
  • [A-Za-z0-9.-]+:然後是一個或多個字母、數字、點或連字符
  • \\.[A-Za-z]{2,}$:以一個點和至少兩個字母結尾

範例 2:搜索電話號碼

讓我們找到特定格式的電話號碼:

SELECT phone
FROM contacts
WHERE REGEXP_LIKE(phone, '^\\+1-[0-9]{3}-[0-9]{3}-[0-9]{4}$');

這個模式匹配如 +1-123-456-7890 的電話號碼。

在客戶端程序中使用 REGEXP_LIKE() 函數

當你在像 MySQL 命令行客戶端這樣的 MySQL 客戶端程序中工作時,你可以在你的查詢中使用 REGEXP_LIKE(),就像我們在例子中做的那樣。以下是如何在客戶端程序中使用它:

  1. 連接到你的 MySQL 數據庫:

    mysql -u your_username -p your_database_name
  2. 一旦連接成功,你可以運行使用 REGEXP_LIKE() 的查詢:

    SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, 'your_pattern');

記住,REGEXP_LIKE() 的強大之處在於,無論你是使用 GUI 工具、命令行客戶端還是在應用程序代碼中嵌入 SQL,它都能無縫工作!

結論

恭喜你!你剛剛踏入了 MySQL 中正則表達式的強大世界。REGEXP_LIKE() 是一個多功能的函數,它可以帮助你在數據中找到那些使用簡單的 LIKE 比較可能困難或不可能找到的模式。

記住,熟能生巧。嘗試創建你自己的模式並在樣本數據上測試它們。在你意識到之前,你將像一名真正的數據偵探一樣,使用 REGEXP_LIKE() 在你的數據庫中發現見解!

愉快地查詢吧,願你的正則表達式總能找到匹配!

Credits: Image by storyset