简体   繁体   English

ORACLE:将字符串拆分为多行

[英]ORACLE: Splitting a string into multiple rows

I am trying to split a string "HHHWWWHHHHWWWWWHHWWWWWHHWWWWWHH" is there any possibility to make like:我正在尝试拆分字符串“HHHWWWHHHHWWWWWHHWWWWWHWWWWWHH”是否有可能像这样:

H
H
H
W
W
W

BRANCH_CODE  YEAR   MONTH   HOLIDAY_LIST
1   001      2021   1        HHHWWWHHHHWWWWWHHWWWWWHHWWWWWHH
2   001      2021   2        WWWWWHHWWWWWHHWWWWWHHWHWWWHH

在此处输入图像描述

From Oracle 12, you can use:来自 Oracle 12,您可以使用:

SELECT branch_code, year, month, day, holiday
FROM   branches
       CROSS JOIN LATERAL (
         SELECT LEVEL AS day,
                SUBSTR(holiday_list, LEVEL, 1) AS holiday
         FROM   DUAL
         CONNECT BY LEVEL <= LENGTH(holiday_list)
       )

Which, for the sample data:其中,对于示例数据:

CREATE TABLE branches (BRANCH_CODE, YEAR, MONTH, HOLIDAY_LIST) AS
SELECT '001', 2021, 1, 'HHHWWWHHHHWWWWWHHWWWWWHHWWWWWHH' FROM DUAL UNION ALL
SELECT '001', 2021, 2, 'WWWWWHHWWWWWHHWWWWWHHWHWWWHH'    FROM DUAL

Outputs:输出:

BRANCH_CODE分行代码 YEAR MONTH DAY HOLIDAY假期
001 001 2021 2021年 1 1个 1 1个 H H
001 001 2021 2021年 1 1个 2 2个 H H
001 001 2021 2021年 1 1个 3 3个 H H
001 001 2021 2021年 1 1个 4 4个 W W
... ... ... ... ... ... ... ... ... ...
001 001 2021 2021年 1 1个 29 29 W W
001 001 2021 2021年 1 1个 30 30 H H
001 001 2021 2021年 1 1个 31 31 H H
001 001 2021 2021年 2 2个 1 1个 W W
001 001 2021 2021年 2 2个 2 2个 W W
001 001 2021 2021年 2 2个 3 3个 W W
... ... ... ... ... ... ... ... ... ...
001 001 2021 2021年 2 2个 26 26 W W
001 001 2021 2021年 2 2个 27 27 H H
001 001 2021 2021年 2 2个 28 28 H H

db<>fiddle here db<> 在这里摆弄

If it's Oracle:如果是 Oracle:

with data AS (
select 'WWWWWHHWWWWWHHWWWWWHHWHWWWHH' AS letters 
from dual
)
select substr (
           letters,
           level,
           1
         ) value
from data
connect by level <= 
    length ( letters ) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM