【Oracle】regexp_substr()函数详解

环境: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如下:

扫描二维码关注公众号,回复: 450508 查看本文章

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   -->匹配到的第二个字段


这样就能达到这个效果









猜你喜欢

转载自blog.csdn.net/imliuqun123/article/details/79895578