环境: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 -->匹配到的第二个字段
这样就能达到这个效果