split - 在 Informatica 中将平面文件字符串拆分为多列
问题描述
我有一个包含 1 列 (ColumnA) 的平面文件 (csv),其数据格式为 ==> 100-000500-10-40000-000-200-600-000
我需要将它分成 8 列(与连字符相邻的值)并连接 2,4 和 5 个拆分的子值。如何在表达式转换中执行此操作?我尝试了以下但没有帮助,表格将这些字段加载为空白。
变量端口 1:SUBSTR(ColumnA,3,6) 变量端口 2:SUBSTR(ColumnA,12,5) 变量端口 3:SUBSTR(ColumnA,18,3)
然后我制作了每三个的输出端口 V_ACCOUNT_SEG2_CODE、V_ACCOUNT_SEG4_CODE、V_ACCOUNT_SEG5_CODE,然后像下面这样连接:
最终变量端口:RTRIM(V_ACCOUNT_SEG2_CODE||'-'||V_ACCOUNT_SEG4_CODE||'-'||V_ACCOUNT_SEG5_CODE,'-')。
有人可以建议代码有什么问题,什么是正确的工作代码?我正在从 ColumnA(csv 平面文件)获取数据到我的目标表(Oracle),但这些额外的列是空的。
解决方案
您需要使用 SUBSTR 和 INSTR 的组合。您不应该使用硬编码值,因为它们可能会根据您的数据而改变。可能这就是您的映射中正在发生的事情。
v_col1= SUBSTR (data_col,1,instr(data_col,'-')-1 )
v_col2 = SUBSTR (data_col,instr(data_col,'-')+1, instr(data_col,'-',1,2)-1 )
v_col3 = SUBSTR (data_col,instr(data_col,'-',1,2)+1,instr(data_col,'-',1,3)-1 )
...
或者,您也可以使用 REGEX,如下所示。但问题是只有当你有一个带有 3 '-' like 的数据时这才有效'abc-defg-hij'
。任何其他组合,拆分都不起作用。
v_col1:= REG_EXTRACT(data_col,'([^-]+)-+([^-])-+([^-]+)',1)
v_col2:= REG_EXTRACT(data_col,'([^-]+)-+([^-])-+([^-]+)',2)
v_col3:= REG_EXTRACT(data_col,'([^-]+)-+([^-])-+([^-]+)',3)
...
或者,您可以将文件数据加载到临时 oracle 表中并使用 regex_substr() 来拆分它们。
推荐阅读
- angular - 在 Ionic 中更改 HTML 时避免整页重新加载
- python - Pymysql 和 Microsoft Azure Mysql 数据库“在查询期间丢失与 MySQL 服务器的连接”
- javascript - 这个权限错误我做错了什么?
- iis - asp.net 网站上的 32 位 dll 问题
- javascript - 通过单击 div 选中复选框 - 不适用于其他功能
- php - 如何识别重复分隔符之间的标记?
- go - 转义“。” 字符串中的字符
- javascript - Javascript变量检查速记
- python - 列表()映射对象之后的Python“int对象不可迭代”
- java - Spring Boot 和 Spring MVC 的区别