将几个逗号字符串转换成行
Convert several commas string into rows
我有这个table(节假日):
CCAA FREEDAYS
AND 01/01,01/03
MAD 01/01,03/03
EUS 01/01,31/12
....
而且我想获得另一个 table:
CCAA FREEDAY
AND 01/01
AND 01/03
MAD 01/01
MAD 03/03
EUS 01/01
EUS 31/12
...
我正在使用这个 SQL 查询:
with t as (SELECT freedays AS txt, CCAA AS CCAA
FROM HOLIDAYS )
select REGEXP_SUBSTR (txt, '[^,]+', 1, level) as freeday, CCAA
from t
connect by REGEXP_SUBSTR (txt, '[^,]+', 1, level) is not null
但是我得到了一个有无限行的 table...
你能帮帮我吗?非常感谢。
您需要 connect-by 子句 link 回到相同的 CCAA 值;但是由于引入了循环,您还需要包含一个非确定性函数。 (this Oracle Community post 中对此过程有很好的解释)。我正在使用 dbms_random.value
,你可以使用 sys_guid()
,等等
...
connect by REGEXP_SUBSTR (txt, '[^,]+', 1, level) is not null
and prior ccaa = ccaa
and prior dbms_random.value is not null;
不知道为什么你在这里有一个 CTE,因为它似乎没有添加任何东西:
select REGEXP_SUBSTR (freedays, '[^,]+', 1, level) as freeday, CCAA
from holidays
connect by REGEXP_SUBSTR (freedays, '[^,]+', 1, level) is not null
and prior ccaa = ccaa
and prior dbms_random.value is not null;
FREEDAY CCA
----------- ---
01/01 AND
01/03 AND
01/01 EUS
31/12 EUS
01/01 MAD
03/03 MAD
6 rows selected
我有这个table(节假日):
CCAA FREEDAYS
AND 01/01,01/03
MAD 01/01,03/03
EUS 01/01,31/12
....
而且我想获得另一个 table:
CCAA FREEDAY
AND 01/01
AND 01/03
MAD 01/01
MAD 03/03
EUS 01/01
EUS 31/12
...
我正在使用这个 SQL 查询:
with t as (SELECT freedays AS txt, CCAA AS CCAA
FROM HOLIDAYS )
select REGEXP_SUBSTR (txt, '[^,]+', 1, level) as freeday, CCAA
from t
connect by REGEXP_SUBSTR (txt, '[^,]+', 1, level) is not null
但是我得到了一个有无限行的 table...
你能帮帮我吗?非常感谢。
您需要 connect-by 子句 link 回到相同的 CCAA 值;但是由于引入了循环,您还需要包含一个非确定性函数。 (this Oracle Community post 中对此过程有很好的解释)。我正在使用 dbms_random.value
,你可以使用 sys_guid()
,等等
...
connect by REGEXP_SUBSTR (txt, '[^,]+', 1, level) is not null
and prior ccaa = ccaa
and prior dbms_random.value is not null;
不知道为什么你在这里有一个 CTE,因为它似乎没有添加任何东西:
select REGEXP_SUBSTR (freedays, '[^,]+', 1, level) as freeday, CCAA
from holidays
connect by REGEXP_SUBSTR (freedays, '[^,]+', 1, level) is not null
and prior ccaa = ccaa
and prior dbms_random.value is not null;
FREEDAY CCA
----------- ---
01/01 AND
01/03 AND
01/01 EUS
31/12 EUS
01/01 MAD
03/03 MAD
6 rows selected