首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何处理字典表映射的字段中有逗号

如何处理字典表映射的字段中有逗号

作者头像
overme
发布2022-01-15 12:06:36
发布2022-01-15 12:06:36
1.2K0
举报
文章被收录于专栏:数据开发笔记数据开发笔记

OracleOracle

场景

今天下班前有个同事喊我帮忙看下,带逗号的字段怎么用字典表映射,如下图效果

我的思路是先把带逗号的字段转成多行,然后再映射,于是先拿 XSHG,XSHE 测试是否可行

代码语言:javascript
复制
SELECT REGEXP_SUBSTR ('XSHG,XSHE', '[^,]+', 1,rownum) AS m_type
 FROM dual
 CONNECT BY ROWNUM <=
LENGTH ('XSHG,XSHE') - LENGTH (REPLACE ('XSHG,XSHE', ',', ''))+1

发现可以,再加上映射字典表,转换关系

代码语言:javascript
复制
select * from ( SELECT REGEXP_SUBSTR ('XSHG,XSHE', '[^,]+', 1,rownum) AS m_type
 FROM dual
 CONNECT BY ROWNUM <=
LENGTH ('XSHG,XSHE') - LENGTH (REPLACE ('XSHG,XSHE', ',', ''))+1) T
left join (select T.KEY,T.VALUE from dict t) D
ON D.KEY=T.m_type;

再用wm_concat 函数拼接回返回就可以了

代码语言:javascript
复制
select wm_concat(d.value) from ( SELECT REGEXP_SUBSTR ('XSHG,XSHE', '[^,]+', 1,rownum) AS m_type
 FROM dual
 CONNECT BY ROWNUM <=
LENGTH ('XSHG,XSHE') - LENGTH (REPLACE ('XSHG,XSHE', ',', ''))+1) T
left join (select T.KEY,T.VALUE from dict t) D
ON D.KEY=T.m_type;

封装成函数

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION GET_FRO_MARKETS(MARKETS VARCHAR2)
  RETURN VARCHAR2 IS
  MARKETS_VALUE VARCHAR(50);
BEGIN
  SELECT WM_CONCAT(D.VALUE) AS M_TYPE
  INTO MARKETS_VALUE
  FROM (SELECT REGEXP_SUBSTR(MARKETS, '[^,]+', 1, ROWNUM) AS M_TYPE
        FROM DUAL
        CONNECT BY ROWNUM <=
                   LENGTH(MARKETS) -
                   LENGTH(REPLACE(MARKETS, ',', '')) + 1) T
  LEFT JOIN (SELECT T.KEY,
                    T.VALUE
             FROM DICT T) D
  ON D.KEY = T.M_TYPE;
  RETURN MARKETS_VALUE;
END;

测试后结果:

代码语言:javascript
复制
SELECT T.ACCID,
       GET_FRO_MARKETS(T.MARKETS) AS MARKETS
FROM TEXT_FOR_DICT T;

以下是测试数据:sql_for_split.sql

本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档