前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle函数REGEXP_SUBSTR结合CONNECT BY

Oracle函数REGEXP_SUBSTR结合CONNECT BY

原创
作者头像
阿贾
修改2021-02-09 10:37:03
4.2K0
修改2021-02-09 10:37:03
举报
文章被收录于专栏:知识库知识库知识库

BackGround

Input:

'Student001,Student001,Student002,Student002,Student003'

'CHINESE,ENGLISH,CHINESE,MATH,ENGLISH'

'60,70,80,90,100'

Output:

Student001 CHINESE 60

Student001 ENGLISH 70

Student002 CHINESE 80

Student002 MATH 90

Student003 ENGLISH 100

REGEXP_SUBSTR函数

REGEXP_SUBSTR函数格式如下:

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

__srcstr     :需要进行正则处理的字符串

__pattern    :进行匹配的正则表达式

__position   :起始位置,从第几个字符开始正则表达式匹配(默认为1)

__occurrence :标识第几个匹配组,默认为1

__modifier   :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)

select regexp_substr('60,70,80,90,100','[^,]+',1,1) result from dual; --60
select regexp_substr('60,70,80,90,100','[^,]+',1,2) result from dual; --70
select regexp_substr('60,70,80,90,100','[^,]+',1,3) result from dual; --80
    
select regexp_substr('60,70,80,90,100','[^,]+',4,1) result from dual; --70
select regexp_substr('60,70,80,90,100','[^,]+',4,2) result from dual; --80
select regexp_substr('60,70,80,90,100','[^,]+',4,3) result from dual; --90

CONNECT BY LEVEL

Oracle中使用connect by 来实现树状查询,可以使用level这个伪列来实现分层查询

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=3;
--1
--2
--3

打印过去五天日期

select sysdate-level days from dual connect by level <= 5;
--07-FEB-21
--06-FEB-21
--05-FEB-21
--04-FEB-21
--03-FEB-21

REGEXP_SUBSTR 结合 CONECT BY LEVEL

SELECT regexp_substr(temp.STUDENT, '[^,]+', 1, level) STUDENT
FROM
  (SELECT 'Student001,Student002,Student003' STUDENT
  FROM dual
  ) temp
  CONNECT BY level <= REGEXP_COUNT('Student001,Student002,Student003', '[^,]+');
--Student001
--Student002
--Student003

SELECT regexp_substr(temp.STUDENT, '[^,]+', 1, LEVEL) AS STUDENT,
  regexp_substr(temp.SUBJECT, '[^,]+', 1, LEVEL) AS SUBJECT,
  regexp_substr(temp.SCORT, '[^,]+', 1, LEVEL)        AS SCORT
FROM
  (SELECT 'Student001,Student001,Student002,Student002,Student003' AS STUDENT,
    'CHINESE,ENGLISH,CHINESE,MATH,ENGLISH'                         AS SUBJECT,
    '60,70,80,90,100'                                              AS SCORT
  FROM dual
  ) temp
  CONNECT BY LEVEL <= REGEXP_COUNT(temp.STUDENT, '[^,]+');
--Student001	CHINESE	60
--Student001	ENGLISH	70
--Student002	CHINESE	80
--Student002	MATH	90
--Student003	ENGLISH	100

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BackGround
    • Input:
      • Output:
      • REGEXP_SUBSTR函数
      • CONNECT BY LEVEL
      • REGEXP_SUBSTR 结合 CONECT BY LEVEL
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档