Подавлять начальные нули из извлечения таблицы оракула в файл

Я извлекаю данные из таблицы оракула в текстовый файл, и у меня есть числовые столбцы ниже. Когда я выбираю приведенные ниже столбцы в файле, он дает мне все начальные нули, которые я хотел подавить.

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), я не получил ожидаемого результата.


person kumar007    schedule 21.11.2019    source источник
comment
учитывая ваш пример, похоже, вы также хотите удалить конечные 0; т.е. вам просто нужно числовое значение. Так ли это, или в ваших выборочных данных должно быть 8,00 363,0?   -  person TheMouseMaster    schedule 21.11.2019
comment
Каков тип данных этих столбцов?   -  person APC    schedule 21.11.2019
comment
Я не думаю, что оракул хранит начальный нуль в столбце числового типа данных.   -  person Popeye    schedule 22.11.2019
comment
Пожалуйста, взгляните на это stackoverflow.com/questions/17656790/   -  person chintuyadavsara    schedule 22.11.2019
comment
хотите прокомментировать инструмент, используемый для буферизации этого в текстовый файл?   -  person Nizam Madurai    schedule 27.11.2019


Ответы (2)


Это вызвано типами данных, установленными на последнем этапе вывода вашего задания datastage. Когда в столбце установлено десятичное число, datastage заполнит оставшиеся позиции ведущими нулями до размера вашего десятичного поля. Самый простой способ обойти это — разместить преобразование перед этапом вывода файла и преобразовать все столбцы в varchar на последнем этапе, обрезав все начальные нули.

person Jose Bagatelli    schedule 27.11.2019

Поскольку данные не числовые и, возможно, в varchar/varchar2;

требуется конвертация; вы можете использовать to_number для решения этой проблемы;

Использование одного из ваших образцов данных в приведенном ниже случае

Выбрать

to_number(00000000000008.2) как num1,

to_number('00000000000008.2') как chr1,

отделка (00000000000008.2) как num2,

отделка ('00000000000008.2') как chr2,

ltrim(00000000000008.2,'0') как num3,

ltrim('00000000000008.2','0') как char3

из двойного

person Nizam Madurai    schedule 27.11.2019