oracle REGEXP_SUBSTR函数

转载摘抄:https://blog.csdn.net/a720561252803/article/details/90702542
https://blog.csdn.net/zz87250976/article/details/22856829

最近做了一个业务需要将表中的像这样的 “1,2,3,4,6”
像这样的字符串转换成list形式

在这里插入图片描述
在这里插入图片描述
因为业务需求需要查询条件 in 里面的值 但是这样没办法in
所以,上代码:

SELECT
 REPLACE (
  REGEXP_SUBSTR (IDS, '[^,]+', 1, lv), --转换成的数组    REPORTX_IDS 要转换的数据字段
  ' ',
  NULL
 ) IDS
FROM
 REPORT,   --表名
 (
  SELECT
   LEVEL lv
  FROM
   dual CONNECT BY LEVEL < 100 --1到100的集合
 ) oo
WHERE
 oo.lv <= REGEXP_COUNT (IDS, '\,') + 1  -- REPORTX_IDS 为'1,2,3,4,5'的字符串 要分开的字段    -- REGEXP_COUNT (REPORTX_IDS, '\,') 计算 REPORTX_IDS 字段所有,的个数
AND TID = 3

查询tid = 3 的执行结果:

在这里插入图片描述

Oracle中如何使用REGEXP_SUBSTR函数

REGEXP_SUBSTR函数格式如下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式('i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’。)

实际应用如下:在oracle中,使用一条语句实现将’34,56,-23’拆分成’34’,‘56’,’-23’的集合。

–1、查询使用正则分割后的第一个值,也就是34 SELECT REGEXP_SUBSTR(‘34,56,-23’,’[^,]+’,1,1,‘i’) AS STR FROM DUAL;
–结果是:34
–2、查询使用正则分割后的最后一个值,也就是-23 SELECT REGEXP_SUBSTR(‘34,56,-23’,’[^,]+’,1,3,‘i’) AS STR FROM DUAL;
–结果是:-23
–3、获取一个多个数值的列,从而能够让结果以多行的形式展示出来 SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=7;
–结果是:
–1
–2
–3
–4
–5
–6
–7
–4、将上面REGEXP_SUBSTR的occurrence关联 SELECT NVL(REGEXP_SUBSTR(‘34,56,-23’, ‘[^,]+’, 1, LEVEL, ‘i’), ‘NULLL’) AS
STR FROM DUAL CONNECT BY LEVEL <= 7;
–结果是:
–34
–56
—23
–null
–null
–mull
–null
–5、优化上面的SQL语句,让生成的行的数量符合实际情况 SELECT REGEXP_SUBSTR(‘34,56,-23’, ‘[^,]+’, 1, LEVEL, ‘i’) AS STR FROM DUAL CONNECT BY LEVEL <=
LENGTH(‘34,56,-23’) - LENGTH(REGEXP_REPLACE(‘34,56,-23’, ‘,’, ‘’)) +
1;
–结果是:
–34
–56
—23

一、REGEXP_COUNT ( source_char, pattern , position , match_param)

统计字段中包含的个数【可以是:数字,文字,英文,符号】的字符串

四个参数解释:

source:

需要用来进行分析的字符串,如  "aaaa","welcome","abc12cdg"

pattern:

字符(可以是正常字母数字等 a,1 等,也可以是正则表达式 /d /w  [a-z]等),整个函数的作用就是返回pattern在source中出现的次数值。

position:

从字符串的那个位置开始分析,可以省略,默认值是1

match_param:

‘i’ 用于不区分大小写的匹配
‘c’ 用于区分大小写的匹配
‘n’ 允许句点(.)作为通配符去匹配换行符。如果省略该参数,则句点将不匹配换行符
‘m’ 将源串视为多行。即Oracle 将^和$分别看作源串中任意位置任何行的开始和结束,而不是仅仅看作整个源串的开始或			  结束。如果省略该参数,则Oracle将源串看作一行。
‘x’ 忽略空格字符。默认情况下,空格字符与自身相匹配。

举例:

select REGEXP_COUNT('welcome','\w')   from DUAL;

二、REGEXP_REPLACE(VARCHAR str, VARCHAR pattern, VARCHAR replacement)

三个参数的解释:

str:

指定用来分析的字符串

pattern:

被替换的字符串,其中可以是 a,b,c之类的普通字符,也可以是正则表达式 [a-z]  /w   /d等

replacement:

用于替换的字符串

举例

select regexp_replace('welcome','e','vv') from dual;
select regexp_replace('welcome','[a-z]','vvv') as result from dual;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值