[MYSQL-9]用正規表示式進行搜尋

VictorLeeLk發表於2017-09-16
  • REGEXP :告訴編譯器regexp後面跟的是正規表示式。
  • 基本字元匹配
#1、列值中包含1000即可
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;
#2、LIKE匹配整個列,以下為列值全名是1000才可以。
SELECT prod_name
FROM products
WHERE prod_name LIKE '1000'
ORDER BY prod_name;

LIKE匹配整個串,REGEXP匹配淄川

  • REGEXP BINARY:區分大小寫
#3、.表示匹配任意一個字元
SELECT prod_name
FROM products
WHERE prod_name REGEXP BINARY '.000'
ORDER BY prod_name;
  • 進行OR匹配
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000|3000'
ORDER BY prod_name;
  • 匹配幾個字元之一
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;

prod_name
‘1 ton anvil’
‘2 ton anvil’

[123] TON與[1|2|3]TON相同

  • 匹配特殊字元
    正規表示式由具有特殊含義的特殊字元構成。如.、[]、|、-(表示一個範圍如1-9),如果想在文字中匹配這些特殊字元,需採用\為前導。\-表示查詢 -,\.表示查詢 . ,\(匹配(。
    多數正規表示式實現使用單個反斜槓轉義字元,MYSQL使用兩個,主要是MYSQL解釋一個,正規表示式解釋一個。
  • 匹配字元類
類名 說明
[:alnum:] 任意字母與數字(同[a-zA-Z0-9])
[:alpha:] 任意字母(同[a-zA-Z])
[:blank:] 空格和製表(同[\\t])
[:digit:] 任意數字同[0-9]
[:lower:] 任意小寫字母(同[a-z])
  • 匹配多個例項
select prod_name from products where prod_name REGEXP '\\([0-9] sticks?\\)' order by prod_name;
select prod_name from products where prod_name REGEXP '[[:digit:]]{4}';# 如果只有一箇中括號,啥也不返回。
select prod_name from products where prod_name REGEXP '[0-9][0-9][0-9][0-9]';# SAME_name AS THE ONE BEFORE 
select prod_name from products where prod_name REGEXP 'stick' order by prod_name;
select prod_name from products where prod_name REGEXP '^[0-9\\.]' order by prod_name;
  • 測試正規表示式
select 'hello' REGEXP 'l*';#return 1

相關文章