1

如何在左侧用零填充整数 (lpad) 并在小数点分隔符后用右侧 (rpad) 填充小数点分隔符。

例如:如果我有 5.95,我想得到 00005950(没有分隔符)。

4

4 回答 4

2

如果您希望该值达到千分之一但没有更多的小数部分,那么您可以乘以 1000 并FLOOR使用TRUNC. 像这样:

SELECT TO_CHAR( TRUNC( value * 1000 ), '00000009' )
FROM   table_name;

或者:

SELECT LPAD( TRUNC( value * 1000 ), 8, '0' )
FROM   table_name;

UsingTO_CHAR将仅允许基于格式掩码设置的最大位数(如果值超过此大小,则它将显示#s 而不是数字),但它将处理负数(将减号放在前导零之前)。

UsingLPAD将允许任何大小的输入,但如果输入为负,则减号将位于字符串的中间(在任何前导零之后)。

于 2016-03-24T11:31:54.820 回答
1

乘法和如何lpad()

select lpad(col * 1000, 8, '0')
. . .
于 2016-03-24T11:23:54.300 回答
0

尝试以下操作:

select lpad(5.42562 * POWER(10, length(trim(regexp_replace(5.42562, '[^.]+\.(.*)$', '.\1')))-1), 8, '0') from dual;

其中 5.42562 将是您想要的列。

因此,基本上,您使用的是 Gordon Linoff 的答案,但乘以 10 即可得到小数位数。

于 2016-03-24T11:35:09.450 回答
0

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;

于 2016-04-05T14:06:08.543 回答