這里寫目錄標題
- 一、元字符
- 二、正則表達函數
- 1、 `regexp_like(x,pattern[,match_option])`
- 2、 regexp_instr(x,pattern[,start[,occurrence[,return_option[, match_option]]]])
- 3、 REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])
- 4、 REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])
一、元字符
當我們要進行一些簡單的糊涂查詢時用百分號(%),通配符(_)
就可以了.其中%表達任意長度的字符串,_表示任意的某一個字符。但如果在一些復雜的查詢中關用這兩個符號sql語句就會非常復雜,而且也不一定能實現.從Oracle 10g開始引入了在其他程序語言中普通使用的正則表達式。主要有regexp_like(匹配),regexp_replace(替換),regexp_substr(提取),regexp_instr(包含)四個正則表達式函數。
二、正則表達函數
1、 regexp_like(x,pattern[,match_option])
含義:查看x是否與pattern相匹配,該函數還可以提供一個可選的參數match_option字符串說明默認的匹配選項。match_option的取值如下:
- ‘c’ 說明在進行匹配時區分大小寫(缺省值);
- ‘i’ 說明在進行匹配時不區分大小寫;
- ‘n’ (.)點號能表示所有單個字符;
- ‘m’ 字符串存在換行的時候當作多行處理.這樣 就可匹配每行的結尾 . 不然的話 就可匹配每行的結尾.不然的話 就可匹配每行的結尾.不然的話只匹配字符串最后的位置。
select * from emp where regexp_like(ename,'^a[a-z]*n$')解析:
從emp表中匹配ename字段,要求以a開頭,a-z任意多個字符(包括0個),n結尾。
例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為默認是區分大小寫。select * from emp where regexp_like(ename,'^a[a-z]*n$','i')可以查找ename為Arwen的行記錄。
2、 regexp_instr(x,pattern[,start[,occurrence[,return_option[, match_option]]]])
含義:用于在x中查找pattern。返回pattern在x中出現的位置。匹配位置從1開始。可以參考字符串函數 INSTR(),參數相關:
- ‘start’ 開始查找的位置;
- ‘occurrence’ 說明應該返回第幾次出現pattern的位置;
- ‘return_option’ 說明應該返回什么整數。若該參數為0,則說明要返回的整數是x中的一個字符的位置;若該參數為非0的整數,則說明要返回的整數為x中出現在pattern之后的字符的位置;
- ‘match_option’ 修改默認的匹配設置。與regexp_like里面的相同。
SELECT REGEXP_INSTR('hello world','o',1,1,0);
==》5 解析:
查找o在hello word中第一次出現的位置。
start=1,occurrence=1,return_option=0SELECT REGEXP_INSTR('hello world','o',1,1,1);
==》6查找o在hello word中第一次出現后的字符的位置,這里return_option=1也可以等于其他非0整數。SELECT REGEXP_INSTR('hello world','o',1,2,0);
==》8查找o在hello word中第二次出現的位置(空格也屬于一個字符位置)。
3、 REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])
**含義:**用于在x中查找pattern并返回。可以參考字符串函數 SUBSTR(),參數同REGEXP_INSTR函數。
SELECT REGEXP_SUBSTR('hello world','l{2}');
==》ll解析:
查詢到匹配的字符串才返回匹配的字符.沒查到就返回空。
4、 REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])
含義:用于在x中查找pattern,并將其替換為replae_string。可以參考字符串函數 REPLACE(),參數同REGEXP_INSTR函數。
REPLACE(String,from_str,to_str) 即:將String中所有出現的from_str替換為to_str。注意:from_str不能是空字符串 ('')。
SELECT REGEXP_REPLACE('hello world','o','x',1,1);
==》hellx world解析:
start=1,occurrence=1。SELECT REGEXP_REPLACE('hello world','o','x');
==》hellx wxrldSELECT REGEXP_REPLACE('hello world','o','x',1,2);
==》hello wxrld