我有一个表table1
,其中包含以下列:
file_name
dqID.AB_RES_ZEST_H2O_XYZ.LKG774548_00035_CAB_TS_HEST_H99_WED_45430098138.txt_154853452388.txt.xml
dqID.AB_RES_ZEST_H2O_XYZ.LKG744348_022335_CAB_TS_HEST_H99_WED_445438138.txt_15344452388.txt.xml
dqID.AB_RES_ZEST_H2O_XYZ.LKG774548_000435_CAB_TS_HEST_H99_WED_45345138.txt_15485343458.txt.xml
我希望根据值创建动态列数,并使用_和。进行拆分。
因此,输出将是:
file_name part1 part2 part3 part4......
dqID.AB_RES_ZEST_H2O_XYZ.LKG774548_00035_CAB_TS_HEST_H99_WED_45430098138.txt_154853452388.txt.xml dqID AB RES ZEST....
dqID.AB_RES_ZEST_H2O_XYZ.LKG744348_022335_CAB_TS_HEST_H99_WED_445438138.txt_15344452388.txt.xml dqID AB RES ZEST....
dqID.AB_RES_ZEST_H2O_XYZ.LKG774548_000435_CAB_TS_HEST_H99_WED_45345138.txt_15485343458.txt.xml dqID AB RES ZEST....
Oracle SQL中仍然存在使用2 _
和.
还可以动态创建零件列吗?因为字符串可以包含很多_
和.
,也可以包含很少的_
和.
答案 0 :(得分:2)
如前所述,sql查询必须返回一组 fixed 列,因此动态部分不能在纯SQL中执行。
以下是一种使用REGEXP_SUBSTR()
将字符串拆分为固定数量的列的解决方案:
SELECT
file_name,
REGEXP_SUBSTR(file_name, '[^._]+', 1, 1) as part1,
REGEXP_SUBSTR(file_name, '[^._]+', 1, 2) as part2,
REGEXP_SUBSTR(file_name, '[^._]+', 1, 3) as part3
FROM table1
您可以在结果集中添加任意多的列。
正则表达式说明:
[ # any character
^ # other than
. # a dot
_ # or an underscore
] #
+ # occuring at least once
因此,基本上,这将捕获分隔符.
和_
之间的字符串部分。