查看: 227|回复: 0

[Oracle数据库] (Les19 Regular expression support)[20180106]

发表于 7 天前
学习目标 -正则元字符串 -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]]]])   
  1. 例子一
  2. 求last_name中含有G[一个字符]g的名称
  3. select * from employees
  4. where regexp_like (last_name,'(G.g)小贝') ;
  5. LAST_NAME EMPLOYEE_ID MANAGER_ID
  6. -------------------- ----------- ----------
  7. Gaga 203 200
  8. 例子二
  9. insert into employees values('Regexp02_test',208,200);
  10. 求出last_name名称中含有数字的
  11. select *
  12. from employees
  13. where regexp_instr(last_name,'[[:digit:]]')>1 ;
  14. LAST_NAME EMPLOYEE_ID MANAGER_ID
  15. -------------------- ----------- ----------
  16. Regexp02_test 208 200
  17. 例子三
  18. 截取last_name数值之前的字符串
  19. col last_name format a20
  20. select regexp_substr(last_name,'[[:alpha:]]*') last_name,employee_id,manager_id
  21. from employees;
  22. LAST_NAME EMPLOYEE_ID MANAGER_ID
  23. -------------------- ----------- ----------
  24. Dereck 100 1
  25. Gary 200 100
  26. Klec 300 100
  27. Gaga 203 200
  28. Wendy 204 200
  29. Xi 205 200
  30. Tinan 206 200
  31. Ling 207 200
  32. Owen 301 300
  33. Yi 302 300
  34. Regexp 208 200
  35. 11 rows selected.
  36. 例子四
  37. 将last_name中的数值替换成**号
  38. col last_name format a20
  39. select regexp_replace(last_name,'[[:digit:]]','*') last_name,employee_id,manager_id
  40. from employees;
  41. LAST_NAME EMPLOYEE_ID MANAGER_ID
  42. -------------------- ----------- ----------
  43. Dereck 100 1
  44. Gary 200 100
  45. Klec 300 100
  46. Gaga 203 200
  47. Wendy 204 200
  48. Xi 205 200
  49. Tinan 206 200
  50. Ling 207 200
  51. Owen 301 300
  52. Yi 302 300
  53. Regexp**_test 208 200
  54. 11 rows selected.
  55. 例子五
  56. 计算last_name中数值出现的次数
  57. col last_name format a20
  58. select last_name,regexp_count(last_name,'[[:digit:]]') t_count,employee_id,manager_id
  59. from employees;
  60. LAST_NAME T_COUNT EMPLOYEE_ID MANAGER_ID
  61. -------------------- ---------- ----------- ----------
  62. Dereck 0 100 1
  63. Gary 0 200 100
  64. Klec 0 300 100
  65. Gaga 0 203 200
  66. Wendy 0 204 200
  67. Xi 0 205 200
  68. Tinan 0 206 200
  69. Ling 0 207 200
  70. Owen 0 301 300
  71. Yi 0 302 300
  72. Regexp02_test 2 208 200
  73. 11 rows selected.
复制代码

学习总结: 1.正则表达式的作用及oracle 10g开始支持功能并遵循(POSIX)标准 2.正则表达式所需的元操作字符 3.正则表达式常见的几个函数并且实践如果使用



回复

使用道具 举报