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()函数详解的主要内容,如果未能解决你的问题,请参考以下文章