关于REGEXP_SUBSTR函数 是如何使用的

转载地址:http://blog.csdn.net/zz87250976/article/details/22856829


REGEXP_SUBSTR函数格式如下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr     :需要进行正则处理的字符串
__pattern    :进行匹配的正则表达式
__position   :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier   :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)

实际应用如下:在Oracle中,使用一条语句实现将'34,56,-23'拆分成'34','56','-23'的集合。

[plain]  view plain  copy
  1. --1、查询使用正则分割后的第一个值,也就是34  
  2. SELECT REGEXP_SUBSTR('34,56,-23','[^,]+',1,1,'i') AS STR FROM DUAL;  
  3. --结果是:34   
  4. --2、查询使用正则分割后的最后一个值,也就是-23  
  5. SELECT REGEXP_SUBSTR('34,56,-23','[^,]+',1,3,'i') AS STR FROM DUAL;  
  6. --结果是:-23  
  7. --3、获取一个多个数值的列,从而能够让结果以多行的形式展示出来  
  8. SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=7;  
  9. --结果是:  
  10. --1  
  11. --2  
  12. --3  
  13. --4  
  14. --5  
  15. --6  
  16. --7  
  17. --4、将上面REGEXP_SUBSTR的occurrence关联  
  18. SELECT NVL(REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL, 'i'), 'NULLL') AS STR FROM DUAL CONNECT BY LEVEL <= 7;  
  19. --结果是:  
  20. --34  
  21. --56  
  22. ---23  
  23. --null  
  24. --null  
  25. --mull  
  26. --null  
  27. --5、优化上面的SQL语句,让生成的行的数量符合实际情况  
  28. SELECT REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL, 'i') AS STR FROM DUAL CONNECT BY LEVEL <= LENGTH('34,56,-23') - LENGTH(REGEXP_REPLACE('34,56,-23', ',', '')) + 1;  
  29. --结果是:  
  30. --34  
  31. --56  
  32. ---23  


你可能感兴趣的:(Oracle基础资料自学)