oracle 字符格式化,干货 | Oracle 中 REGEXP_SUBSTR函数搜索格式化字段的值(横向竖向显示所有值)...

一、需求分析最近碰到一个需求,业务系统某个表的某个字段值(比如1,2,3,4,5,6,7,8,9,10)比较特殊,里面包含了以固定字符(比如逗号",")分割的值,业务系统希望格式化查询这个字段的值。

二、解决方案在oracle里面搜索可以使用正则表达式函数,Oracle中支持正则表达式的函数主要有下面四个:

REGEXP_LIKE:与LIKE的功能相似REGEXP_INSTR:与INSTR的功能相似REGEXP_SUBSTR:与SUBSTR的功能相似REGEXP_REPLACE:与REPLACE的功能相似它们在用法上与Oracle函数LIKE、INSTR、SUBSTR和REPLACE用法相同,但是它们使用POSIX正则表达式代替了老的百分号(%)和通配符(_)字符。

三、REGEXP_SUBSTR函数使用说明

REGEXP_SUBSTR语法图

c62c9af40f73ada6bfe9ff58a80d41ed.png

REGEXP_SUBSTR插图描述:REGEXP_SUBSTR(source_char, pattern

[, position

[, occurrence

[, match_param

[, subexpr

]

]

]

]

)

四、使用案例

创建测试表create table xxx (c1 varchar2(100));select * from xxx;

插入测试数据insert into xxx values('1,2,3,4,5,6,7,8,9,10');

SQL> --格式化查询数据SQL> select c1 from xxx;C1

1,2,3,4,5,6,7,8,9,10

SQL> --格式化查询数据-,分割第1个个值SQL> SELECT REGEXP_SUBSTR(c1,'[^,]+',1,1,'i') AS STR FROM xxx;STR

1

SQL> --格式化查询数据-,分割第2个个值SQL> SELECT REGEXP_SUBSTR(c1,'[^,]+',1,2,'i') AS STR FROM xxx;STR

2SQL> --格式化查询数据-,分割第3个个值SQL> SELECT REGEXP_SUBSTR(c1,'[^,]+',1,3,'i') AS STR FROM xxx;STR

3SQL> --格式化查询数据-,分割第3个个值,横向显示SQL> SELECT REGEXP_SUBSTR(c1,'[^,]+',1,1,'i') v1,REGEXP_SUBSTR(c1,'[^,]+',1,2,'i') v2,REGEXP_SUBSTR(c1,'[^,]+',1,3,'i') v3 FROM xxx;V1 V2 V3

1 2 3SQL> --格式化查询数据-,分割所有值,竖向显示,使用connect函数SQL> SELECT REGEXP_SUBSTR(c1, '[^,]+', 1, LEVEL, 'i') AS STR2 FROM xxx3 CONNECT BY LEVEL <= LENGTH(c1) - LENGTH(REGEXP_REPLACE(c1, ',', ''))+1;STR

1234567891010 rows selected

SQL>

0e0350be165528b97af9a3b3c786938c.png

|北京    |上海    |广州|成都    |

4008-906-960

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值