Как я могу дополнить целое число нулями слева (lpad) и дополнить десятичное число после десятичного разделителя нулями справа (rpad).
Например: если у меня 5,95, я хочу получить 00005950 (без разделителя).
Как я могу дополнить целое число нулями слева (lpad) и дополнить десятичное число после десятичного разделителя нулями справа (rpad).
Например: если у меня 5,95, я хочу получить 00005950 (без разделителя).
Если вам нужно значение до тысячных, но не более десятичной части, вы можете умножить на 1000 и либо FLOOR
, либо использовать TRUNC
. Как это:
SELECT TO_CHAR( TRUNC( value * 1000 ), '00000009' )
FROM table_name;
or:
SELECT LPAD( TRUNC( value * 1000 ), 8, '0' )
FROM table_name;
Использование TO_CHAR
позволит установить только максимальное количество цифр на основе маски формата (если значение превысит этот размер, вместо чисел будет отображаться #
s), но оно будет обрабатывать отрицательные числа (знак минуса помещается перед ведущими нулями).
Использование LPAD
позволит ввести любой размер ввода, но если ввод отрицательный, знак минус будет в середине строки (после любых начальных нулей).
ROUND()
вместо TRUNC()
?
- person Alex Poole; 24.03.2016
Как насчет умножения и lpad()
:
select lpad(col * 1000, 8, '0')
. . .
Попробуйте следующее:
select lpad(5.42562 * POWER(10, length(trim(regexp_replace(5.42562, '[^.]+\.(.*)$', '.\1')))-1), 8, '0') from dual;
где 5.42562 будет столбцом, который вам нужен.
Итак, в основном вы используете ответ Гордона Линоффа, но умножаете на 10 до количества десятичных знаков.
select lpad(rpad(replace('5.95','.',''),4,0),8,0) from dual;
Предполагая, что у вас есть шкала или нет, string
должен быть суффиксом с 0
и префиксом 0
до 8-й цифры. Выкладываю запрос.
Дайте мне знать, если это удовлетворяет вашим требованиям или требуется что-то еще.
select lpad(rpad(replace('5.95','.',''),4,0),8,0) from dual;