如何使用Conditional Split提取字符串列键值对生成独立字段
实现方案
方案1:SSIS环境下结合派生列+条件拆分实现
- 第一步:统一预处理字符串列,使用派生列组件清理格式,表达式为:
REPLACE(TRIM([String column]), ". ", "|"),如果字符串结尾存在残留的.可额外加判断移除,统一键值对的分隔格式。 - 第二步:针对已知的所有键(A/B/C/D),分别在派生列中写提取逻辑,无需提前拆分全字符串,直接通过定位键的位置截取对应值,以A列提取为例,表达式如下:
FINDSTRING([String column], "A:", 1) == 0 ? "" : TRIM( SUBSTRING( [String column], FINDSTRING([String column], "A:", 1) + 2, CASE WHEN FINDSTRING(SUBSTRING([String column], FINDSTRING([String column], "A:", 1) + 2, LEN([String column])), ".", 1) == 0 THEN LEN(SUBSTRING([String column], FINDSTRING([String column], "A:", 1) + 2, LEN([String column]))) ELSE FINDSTRING(SUBSTRING([String column], FINDSTRING([String column], "A:", 1) + 2, LEN([String column])), ".", 1) - 1 END ) )
依次把表达式中的A:替换为B:、C:、D:即可生成对应列,不存在对应键的行会自动返回空值。
- 第三步:如果需要使用Conditional Split做分支处理,可按
FINDSTRING([String column], "A:", 1) > 0这类规则设置分支条件,对应处理不同键存在的行数据。
方案2:SQL层面直接解析(适合ETL前置处理)
如果使用的数据库支持正则函数(SQL Server 2017+、MySQL 8.0+、PostgreSQL等),直接用正则提取更简单,以SQL Server为例,代码如下:
SELECT TRIM(REGEXP_SUBSTR([String column], 'A:([^.]*)', 1, 1, NULL, 1)) AS A, TRIM(REGEXP_SUBSTR([String column], 'B:([^.]*)', 1, 1, NULL, 1)) AS B, TRIM(REGEXP_SUBSTR([String column], 'C:([^.]*)', 1, 1, NULL, 1)) AS C, TRIM(REGEXP_SUBSTR([String column], 'D:([^.]*)', 1, 1, NULL, 1)) AS D FROM 你的表名
该方法无需拆分字符串,直接匹配每个键对应的值,不存在的键自动返回空值,完全符合输出要求。
内容的提问来源于stack exchange,提问作者xSpekkio
相关产品推荐
相关产品推荐

