學習目標 -正則元字元串 -SQL語句中使用正則搜索 -SQL語句中使用正則匹配 -SQL語句中使用正則替代字元串 正則表達式 Oracle資料庫10g引入對正則表達式的支持。 實現了符合UNIX可移植操作系統(POSIX)標準,由電氣和電子工程師協會(IEEE)控制,ASCII數據匹配的語義和語法 ...
學習目標 -正則元字元串 -SQL語句中使用正則搜索 -SQL語句中使用正則匹配 -SQL語句中使用正則替代字元串 正則表達式 Oracle資料庫10g引入對正則表達式的支持。 實現了符合UNIX可移植操作系統(POSIX)標準,由電氣和電子工程師協會(IEEE)控制,ASCII數據匹配的語義和語法。 正則表達式是一種描述簡單和複雜的搜索和操作模式的方法。 正則(POSIX )元字元 '*' 匹配前面的表達式一次或多次 '|' 指明兩項之間選擇其一 '^' 匹配輸入字元串的開始位置,註意,若是在方括弧表達式中使用^,此時它表示不接受該字元集。 '[]' 標記一個中括弧表達式 '{m}' 表示出現幾次 '{m,n}' 表示出現次數的範圍值 m<=出現次數<=n '\' 有4種不同含義,'\'反斜杠自身、\num 匹配的引用、\n轉義符和什麼都不是。 '+' 匹配前面的子表達式一次或多次 '?' 匹配前面的子表達式零次或一次 '.' 匹配除換行符之外的任何單字元 '()' 標記一個子表達式的開始和結束位置 '[::]' 表示是一個字元簇 : [[:alpha:]] 任何字母 [[:digit:]] 任何數字 [[:alnum:]] 任何字母和數字 [[:space:]] 空白字元 [[:upper:]] 大寫字母 [[:lowe:]] 小寫字母 [[:punct:]] 任何標點符號 [[:xdigit:]] 任何16進位的數字,相當於[0-9a-fA-F] 正則表達式函數 REGEXP_LIKE 與LIKE的功能相似,匹配相似字元串 REGEXP_REPLACE 與REPLACE功能相似,替換字元串 REGEXP_INSTR 與INSTR功能相似,標識字元下標 REGEXP_SUBSTR 與SUBTR功能相似,截取指定位置字元串 REGEXP_COUNT 與COUNT相似,計算某個樣式反覆出現的次數 它們在用法上與Oracle SQL函數LIKE、INSTR、SUBSTR、REPLACE用法相同,但是它們使用POSIX正則表達式替代了老的百分號(%)和通配符(_)字元。 REGEXP_LIKE (srcstr,pattern [,match_option]) REGEXP_INSTR (srcstr,pattern [,position [,occurrence [,return_option [,match_option]]]]) REGEXP_SUBSTR (srcstr,pattern [,position [,occurrence [,match_option]]]) REGEXP_REPLACE (srcstr,pattern [,replacestr [,position [, occurrence [,match_option]]]])
例子一 求last_name中含有G[一個字元]g的名稱 select * from employees where regexp_like (last_name,'(G.g){1}') ; LAST_NAME EMPLOYEE_ID MANAGER_ID -------------------- ----------- ---------- Gaga 203 200 例子二 insert into employees values('Regexp02_test',208,200); 求出last_name名稱中含有數字的 select * from employees where regexp_instr(last_name,'[[:digit:]]')>1 ; LAST_NAME EMPLOYEE_ID MANAGER_ID -------------------- ----------- ---------- Regexp02_test 208 200 例子三 截取last_name數值之前的字元串 col last_name format a20 select regexp_substr(last_name,'[[:alpha:]]*') last_name,employee_id,manager_id from employees; LAST_NAME EMPLOYEE_ID MANAGER_ID -------------------- ----------- ---------- Dereck 100 1 Gary 200 100 Klec 300 100 Gaga 203 200 Wendy 204 200 Xi 205 200 Tinan 206 200 Ling 207 200 Owen 301 300 Yi 302 300 Regexp 208 200 11 rows selected. 例子四 將last_name中的數值替換成**號 col last_name format a20 select regexp_replace(last_name,'[[:digit:]]','*') last_name,employee_id,manager_id from employees; LAST_NAME EMPLOYEE_ID MANAGER_ID -------------------- ----------- ---------- Dereck 100 1 Gary 200 100 Klec 300 100 Gaga 203 200 Wendy 204 200 Xi 205 200 Tinan 206 200 Ling 207 200 Owen 301 300 Yi 302 300 Regexp**_test 208 200 11 rows selected. 例子五 計算last_name中數值出現的次數 col last_name format a20 select last_name,regexp_count(last_name,'[[:digit:]]') t_count,employee_id,manager_id from employees; LAST_NAME T_COUNT EMPLOYEE_ID MANAGER_ID -------------------- ---------- ----------- ---------- Dereck 0 100 1 Gary 0 200 100 Klec 0 300 100 Gaga 0 203 200 Wendy 0 204 200 Xi 0 205 200 Tinan 0 206 200 Ling 0 207 200 Owen 0 301 300 Yi 0 302 300 Regexp02_test 2 208 200 11 rows selected.
學習總結: 1.正則表達式的作用及oracle 10g開始支持功能並遵循(POSIX)標準 2.正則表達式所需的元操作字元 3.正則表達式常見的幾個函數並且實踐如果使用