Supress从Oracle表提取的前导零提取到文件

时间:2019-11-21 19:21:22

标签: oracle datastage

我正在将数据从oracle表提取到文本文件,并且下面有数字列。当我在文件中选择以下列时,它会给我所有我想抑制的前导零。

Select ltrim(col_1,'0'),ltrim(col_2,'0'),ltrim(col_3,'0') from table1 

数据类型:

Col_1 ---NUMBER(10,2), 
Col_2 ---NUMBER(38,0),
Col_3 ---NUMBER(15,1)

当前输出:

00000303.44|0| 00000000000008.2    
00000000.00|26| 00000000000030.2    
00000473.40|0| 00000000000010.0

预期输出:

303.44|0|8.2    
0|26|30.2    
473.4|0|10

请让我知道是否需要更改数据类型以获取期望的输出。我什至尝试TO_CHAR(TRIM(LEADING 0 FROM col_name)我没有得到预期的输出。

2 个答案:

答案 0 :(得分:0)

这是由数据阶段作业的最后一个输出阶段中设置的数据类型引起的。如果将一列设置为小数,则datastage将使用前导零填充其余位置,最大保留为十进制字段的大小。 解决此问题的最简单方法是在文件输出阶段之前进行转换,并在最后阶段修剪所有前导零以将所有列转换为varchar。

答案 1 :(得分:0)

由于数据不是数量,可能是varchar / varchar2;

需要转换;您可以使用to_number来解决此问题;

在以下情况下使用您的示例数据之一

选择

to_number(00000000000008.2)作为num1,

to_number('00000000000008.2')作为chr1,

trim(00000000000008.2)为num2,

trim('00000000000008.2')作为chr2,

ltrim(00000000000008.2,'0')为num3,

ltrim('00000000000008.2','0')为char3

来自双重