gpt4 book ai didi

sql - 如何将逗号分隔的列转换为 db2 中的多行

转载 作者:行者123 更新时间:2023-12-01 11:38:42 28 4
gpt4 key购买 nike

我有下表(引用的数量是可变的):

Id | FK_ID| Reference |
-----------------------
1 2100 GI2, GI32
2 2344 GI56

我需要以下结果:
Id | FK_ID| Reference |
-----------------------
1 2100 GI2
2 2100 GI32
3 2344 GI56

有没有什么简单的方法可以使用 DB2 转换这样的数据?

最佳答案

你真的不应该像这样存储数据。幸运的是,有一种方法可以使用递归 SQL 来消除损害,大致如下:

WITH unpivot (lvl, id, fk_ref, reference, tail) AS (  
SELECT 1, id, fk_ref,
CASE WHEN LOCATE(',',reference) > 0
THEN TRIM(LEFT(reference, LOCATE(',',reference)-1))
ELSE TRIM(reference)
END,
CASE WHEN LOCATE(',',reference) > 0
THEN SUBSTR(reference, LOCATE(',',reference)+1)
ELSE ''
END
FROM yourtable
UNION ALL
SELECT lvl + 1, id, fk_ref,
CASE WHEN LOCATE(',', tail) > 0
THEN TRIM(LEFT(tail, LOCATE(',', tail)-1))
ELSE TRIM(tail)
END,
CASE WHEN LOCATE(',', tail) > 0
THEN SUBSTR(tail, LOCATE(',', tail)+1)
ELSE ''
END
FROM unpivot
WHERE lvl < 100 AND tail != '')
SELECT id, fk_ref, reference FROM unpivot

附注。未测试。

关于sql - 如何将逗号分隔的列转换为 db2 中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367069/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com