DataStage中如何识别和转换一串数字?
How to identify and convert a series of numbers in DataStage?
我需要识别一个字段中的值,这些值属于 9 系列且大于或等于 99999,并在 DataStage 中将它们转换为 0,即该字段的至少前 5 个字节是 9。这里有一些例子可以更好地解释这种情况
999.00 - 不要转换
9999.00- 不转换
99999.00- 转换为 0
999991.00-转换为0
100000.00- 不转换
999999.00- 转换为 0
123456.00-不转换
9999999.00-转换为0
1999999.00-不转换
1000000.00-不转换
现在我有 If Convert('9','', Trim(Trim(Field(NullToZero(AMT),'.',1)),'0', 'L')) = '' 然后 0。这会转换任何 9,但我们的目标是仅转换 99999 和更大的 9。请帮忙解决
使用 Field() 函数仅处理小数点占位符左侧的数字。测试这个值至少有五个字符,并且都是“9”。
If Len(Field(AMT,".",1,1) >= 5 And Convert("9","",Field(AMT,".",1,1)) = "" Then 0 Else AMT
更好的方法是将 Field() 函数解析为阶段变量,这样它就不会执行两次,并在表达式中使用该阶段变量。
我需要识别一个字段中的值,这些值属于 9 系列且大于或等于 99999,并在 DataStage 中将它们转换为 0,即该字段的至少前 5 个字节是 9。这里有一些例子可以更好地解释这种情况 999.00 - 不要转换 9999.00- 不转换 99999.00- 转换为 0 999991.00-转换为0 100000.00- 不转换 999999.00- 转换为 0 123456.00-不转换 9999999.00-转换为0 1999999.00-不转换 1000000.00-不转换
现在我有 If Convert('9','', Trim(Trim(Field(NullToZero(AMT),'.',1)),'0', 'L')) = '' 然后 0。这会转换任何 9,但我们的目标是仅转换 99999 和更大的 9。请帮忙解决
使用 Field() 函数仅处理小数点占位符左侧的数字。测试这个值至少有五个字符,并且都是“9”。
If Len(Field(AMT,".",1,1) >= 5 And Convert("9","",Field(AMT,".",1,1)) = "" Then 0 Else AMT
更好的方法是将 Field() 函数解析为阶段变量,这样它就不会执行两次,并在表达式中使用该阶段变量。