本人在初學mysql語言,因害怕忘記,故把學習筆記寫到這個部落格上,以備查閱
所有種類的程式語言,文字編輯器,作業系統等都支援正規表示式。有見識的程式設計師和網路管理員已經關注作為他們技術工具重要內容的正規表示式很長時間了。
正規表示式使用正規表示式語言建立,與任意語言一樣,正規表示式具有你必須學習的特殊語法和指令。
檢索列prod_name包含文字1000的所有行
select prod_name
from products
where prod_name regexp '1000';
9.2.2 進行or匹配
檢索列prod_name中包含1000或2000的所有行
select prod_name
from products
where prod_name regexp '1000|2000'
oreder by prod_name;
9.2.3 匹配幾個字元之一
通過指定一組用[ 和 ]括起來的字元來完成
檢索列prod-name中使用'1 ton'或'2 ton'或'3 ton'的所有列
[ ]是另一種形式的or語句。事實上,正規表示式[123] ton為[1|2|3] ton的縮寫,兩者都可以使用。
select prod_name
from products
where prod_name regexp '[123] ton'
order by prod_name;
注意下面的這個例子,檢索的是列prod_name中包含』1『或『2』或『3 ton』的所有行
select prod_name
from products
where prod_name regexp '1|2|3 ton'
order by prod_name;
[^123]匹配除這些字元之外的任何東西
9.2.4 匹配範圍
下面的例子中[a-z]定義了乙個範圍,這個表示式意思是匹配a到c
select prod_name
from products
where prod_name regexp '[a-c] ton'
order by prod_name;
9.2.5 匹配特殊字元
如果想匹配 . [ ] -等一些特殊字元,必須用\\為前引導。\\-表示查詢-,\\.表示查詢. 。
select vend_name
from vendors
where vend_name regexp '\\.'
order by vend_name;
\\也用來引用元字元(具有特殊含義的字元)
\\f 換頁
\\n 換行
\\r 回車
\\t 製表
\\v 縱向製表
9.2.6 匹配字元類
[:alnum:] 任意字母或數字(同[a-za-z0-9])
[:alpha:]任意字元(同[a-za-z])
[:blank:]空格和製表(同[\\t])
[:cntrl:]ascii控制字元(ascii 0到31和127)
[:digit:]任意數字 (同[0-9])
[:graph:]與[:print:]相同,但不包括空格
[:lower:任意小寫字母(同[a-z])]
[:print:]任意可列印字元
[:punct:]既不在[:alnum:]又不在[:cntrl:]中的任意字元
[:space:]包括空格在內的任意空白字元(同[\\f\\n\\r\\t\\v])
[:upper:]任意大寫字母(同[a-z])
[:xdigit:]任意十六進製制數字(同[a-fa-f0-9])
9.2.7 匹配多個例項
* 0個或多個匹配
+ 1個或多個匹配(等於)
? 0個或乙個匹配(等於)
指定數目的匹配
不少於指定數目的匹配
匹配數目的範圍(m不超過255)
例子:
select prod_name
from products
where prod_name regexp '\\([0-9] sticks?\\)'
order by prod_name;
上述例子中的正規表示式\\([0-9] sticks?\\)的含義:
\\( 匹配(
[0-9]匹配任意數字
sticks?匹配stick和sticks(s後的?使s可選,因為?匹配前面的任何字元的0次或1次出現)
\\) 匹配)
如果沒有?,匹配stick和sticks會非常困難
例子:
select prod_name
from products
where prod_name regexp '[[:digit:]]'
order by prod_name;
如前所述,[:digit:]匹配任意數字,因而它為數字的乙個集合。確切的要求它前面的字元(任意數字)出現4次,所有[[:digit:]] 匹配連在一起的任意四位數字。
注意:在使用正規表示式時,編寫某個特殊的表示式幾乎總有不止一種方法。上面的例子也可以寫成如下:
select prod_name
from products
where prod_name regexp '[0-9]'[0-9]'[0-9]'[0-9]'
order by prod_name;
9.2.8 定位符
為了匹配特定位置的文字,需要使用如下圖所示的定位符
^ 文字的開始
$ 文字的結尾
[[:<:>
[[:>:]] 詞的結尾
例子:
select prod_name
from products
where prod_name regexp '^[0-9\\.]'
order by prod_name;
^匹配串的開始。因此,^[0-9\\.]只在.或任意數字為串中第乙個字元時才匹配他們。
注意:^的雙重用途
1.用在[和]中,否定該集合
2.用來指串的開始處
簡單的正規表示式測試
regexp檢查總是返回0(沒有匹配)或1(匹配)。所以可以用代字串的regexp來測試表示式,並試驗他們,相應的語法如下:
select 'hello' regexp '[0-9]';
這個例子返回0(文字中無hello)或1(文字中有hello)
本章小結
本章介紹了正規表示式的基礎知識,學習了如何在mysql的select語句中通過regexp關鍵字來使用他們。
第一次在csdn上寫部落格,用了將近1個半小時,而且排版好麻煩,應該是我不會用,但是一方面加深了記憶,另一方面也會讓我慢慢養成習慣。以後我要養成習慣,加油。。。
《MySQL必知必會》學習筆記
學習sql不是為了用它來幹活,只是出於興趣對它進行簡單的了解,寫下這篇學習筆記的目的也很簡單 幫助自己記憶。本次的學習筆記機遇linux centos 7 和mariadb。yum install mariadb mariadb server systemctl start mariadb syst...
mysql必知必 SQL必知必會學習筆記 一
資料庫基礎 資料庫 資料庫軟體 確切的說,資料庫軟體應稱為資料庫管理系統 dbms 資料庫是通過dbms建立和操作的容器 資料庫相當於檔案櫃 容器 表相當於檔案 同乙個資料庫不能存在相同的表名,不同的資料庫可以存在相同的表名 主鍵應滿足的條件 唯一性非空性 not null 主鍵列中的值不允許修改或...
mysql必知必會 mysql必知必會(四)
十四 理解子查詢 1 通過子查詢過濾 這本書在所有的章節都關連到了資料庫表,訂單資料是儲存在兩個表中,orders表儲存著 訂單號碼 顧客id和訂單日期。個人的訂單列表關連著orderitems表,訂單表沒有儲存顧客資訊,它只是儲存著顧客id,這實際的顧客資訊是儲存在customers表中。現在假設...