Oracleregexp_substr()函数详解

Posted zclinux的Oracle笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracleregexp_substr()函数详解相关的知识,希望对你有一定的参考价值。

最近在读Oracle的SQL优化查询改写,里面提到了一个函数,这个函数的应用比较常见,10g以上都可以使用这个函数(包括10g)

下面来详细介绍下:

环境:Oracle10.2.0.5


在SQL中尝试使用正则

可以试下regexp_substr()来进行分割

首先创建一个实验视图:



SQL> create or replace view test_ip as select '192.168.1.1' as ip from dual  

  2  union all  

  3  select '192.168.1.2' as  ip from dual   

  4  union all   

  5  select '192.168.1.3' as  ip from dual  

  6  union all  

  7  select '192.168.1.4' as  ip from dual;  


创建了一个视图,查看下视图的整体结构



SQL> select * from test_ip;  

  

IP  

-----------  

192.168.1.1  

192.168.1.2  

192.168.1.3  

192.168.1.4  

现在有一个需求,需要将这些ip以“.”为分隔符,分段显示ip

最终效果如下:



IP1                    IP2                    IP3                    IP4  

---------------------- ---------------------- ---------------------- ----------------------  

192                    168                    1                      1  

192                    168                    1                      2  

192                    168                    1                      3  

192                    168                    1                      4  

执行的SQL如下:



select regexp_substr(a.ip, '[^.]+', 1, 1) ip1,  

       regexp_substr(a.ip, '[^.]+', 1, 2) ip2,  

       regexp_substr(a.ip, '[^.]+', 1, 3) ip3,  

       regexp_substr(a.ip, '[^.]+', 1, 4) ip4  

  from test_ip a;  



分析:

regexp_substr()括号中的

[^.]   -->代表除了“.”以外的全部字段
+   -->表示匹配1次以上

1  -->从第一个“.”开始

2   -->匹配到的第二个字段


这样就能达到这个效果


以上是关于Oracleregexp_substr()函数详解的主要内容,如果未能解决你的问题,请参考以下文章

Oracle REGEXP_SUBSTR 解析美元金额

PageTransformer函数详解

来自 CLOB 的 Oracle REGEXP_SUBSTR

promise函数详解

Hive—date函数详解

标准文件IO详解---fileno函数详解