字符串转换问题:现有一个字符串,“2202196/98-99/200-20204”

字符串转换问题:现有一个字符串,“2202196/98-99/200-202/204”或“2202196-99/200-202/204”,规则就是相连就用“-”,不相连就用“/”。现需要将这一串字符串转换为“2202196,2202198,2202199,2202200,2202201,2202202,2202204”或“2202196,2202197,2202198,2202199,2202200,2202201,2202202,2202204”。在帆软里面或者sql函数转换都可以。

FineReport 快乐星光 发布于 2022-5-16 11:37
1min目标场景问卷 立即参与
回答问题
悬赏:5 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
1
yoyo鹿铭Lv5见习互助
发布于2022-5-16 13:59

image.png

SELECT A,B,WM_CONCAT(B)OVER() C

  FROM (SELECT DISTINCT X.A,

                        --Y.COLUMN_VALUE,

                        --LEVEL,

                        CASE

                          WHEN Y.COLUMN_VALUE LIKE '%-%' THEN

                           TO_NUMBER(SUBSTR(A,

                                            1,

                                            7 -

                                            LENGTH(SUBSTR(Y.COLUMN_VALUE,

                                                          1,

                                                          INSTR(Y.COLUMN_VALUE,

                                                                '-') - 1))) ||

                                     SUBSTR(Y.COLUMN_VALUE,

                                            1,

                                            INSTR(Y.COLUMN_VALUE, '-') - 1)) +

                           LEVEL - 1

                          ELSE

                           TO_NUMBER(SUBSTR(A, 1, 7 - LENGTH(Y.COLUMN_VALUE)) ||

                                     Y.COLUMN_VALUE)

                        END B

          FROM (SELECT '2202192-96/98-99/200-202/204' AS A FROM DUAL) X,

               TABLE(SPLIT(A, '/')) Y

        CONNECT BY LEVEL <= CASE

                     WHEN Y.COLUMN_VALUE LIKE '%-%' THEN

                      TO_NUMBER(SUBSTR(A,

                                       1,

                                       7 -

                                       LENGTH(SUBSTR(Y.COLUMN_VALUE,

                                                     INSTR(Y.COLUMN_VALUE, '-') + 1))) ||

                                SUBSTR(Y.COLUMN_VALUE,

                                       INSTR(Y.COLUMN_VALUE, '-') + 1)) -

                      TO_NUMBER(SUBSTR(A,

                                       1,

                                       7 -

                                       LENGTH(SUBSTR(Y.COLUMN_VALUE,

                                                     1,

                                                     INSTR(Y.COLUMN_VALUE, '-') - 1))) ||

                                SUBSTR(Y.COLUMN_VALUE,

                                       1,

                                       INSTR(Y.COLUMN_VALUE, '-') - 1)) + 1

                     ELSE

                      1

                   END)

最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-5-16 11:41

SqlServer?

  • 快乐星光 快乐星光(提问者) 是的,根源就是连个表join 关联两个字段。表一 || 母号:120500000343;子号:2202196/98 表二 || 母号:120500000343;子号:2202196 120500000343 2202198 现在需要把表一拆分成和表二一样来join,如果不拆分有办法join也可以。
    2022-05-16 12:22 
最佳回答
0
好好生活好好学习Lv7资深互助
发布于2022-5-16 12:25(编辑于 2022-5-16 22:42)

GettingStarted.rar

第二个sheet ,这种格式可以不

image.png

GettingStarted.rar

sheet3

image.png

  • 快乐星光 快乐星光(提问者) -代表数据是连续的,200-202应该为,200,201,202。能修改一下不?
    2022-05-16 18:51 
  • 3关注人数
  • 509浏览人数
  • 最后回答于:2022-5-16 22:42
    请选择关闭问题的原因
    确定 取消
    返回顶部