【发布时间】:2016-03-24 11:22:00
【问题描述】:
如何在左边用零填充整数 (lpad),在小数点分隔符后用右边的零填充小数点 (rpad)。
例如:如果我有 5.95,我想得到 00005950(不带分隔符)。
【问题讨论】:
-
您的数据库中是否有类似 sprintf() 的东西?这将是最简单、最易读的方法。
标签: sql oracle oracle-data-integrator
如何在左边用零填充整数 (lpad),在小数点分隔符后用右边的零填充小数点 (rpad)。
例如:如果我有 5.95,我想得到 00005950(不带分隔符)。
【问题讨论】:
标签: sql oracle oracle-data-integrator
如果您希望该值达到千分之一但不超过小数部分,则可以乘以 1000 并使用FLOOR 或使用TRUNC。像这样:
SELECT TO_CHAR( TRUNC( value * 1000 ), '00000009' )
FROM table_name;
或:
SELECT LPAD( TRUNC( value * 1000 ), 8, '0' )
FROM table_name;
使用TO_CHAR 将只允许基于格式掩码设置的最大位数(如果值超过此大小,则它将显示#s 而不是数字)但它会处理负数(将前导零前的减号)。
使用LPAD 将允许任何大小的输入,但如果输入为负数,则减号将位于字符串的中间(在任何前导零之后)。
【讨论】:
ROUND() 而不是 TRUNC()?
乘法和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 将是您想要的列。
所以基本上,您使用的是 Gordon Linoff 的答案,但乘以 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;
【讨论】: