LPAD和RPAD使得总长度为20个字符

时间:2016-10-07 01:00:21

标签: sql oracle

我在表格中有一列,其值如下:

105,65
106,8
107
108,1234

现在我必须以16,4格式输出它,删除逗号。

我试过

REPLACE(RPAD(LPAD(AMOUNT, 16, '0'), 20, '0'), ',', '')

但它始终向右填充4个零,这不是预期的结果。如果逗号后面有4个字符,则不应该正确填充零。

如果可以在一个SQL语句中完成它对我有帮助。 此外,当我替换逗号时,它正在减少一个字符。

2 个答案:

答案 0 :(得分:3)

我很想将其转换为小数,然后转换为字符串:

select cast(cast(replace(amount, ',', '.') as decimal(20, 4)) as varchar(20))

我不太确定你是否需要填充。另外,如果逗号已经是小数点分隔符,则可能不需要替换逗号。

编辑:

现在指定了结果:

select lpad(10000 * cast(replace(amount, ',', '.') as decimal(20, 4)),
            20, '0')

或者,如果amount已经是一个数字(它确实应该是):

select lpad(round(amount * 10000), 20, '0')

答案 1 :(得分:0)

你不需要LPAD或RPAD或类似的东西。你需要TO_CHAR,使用正确的格式模型。

例如:

select to_char(10000*105.65, '00000000000000000009') as form_num from dual;

FORM_NUM            
---------------------
00000000000001056500

如果输入是一个字符串,' 4.105,65' (它不应该是,它应该是一个数字;但如果它是一个字符串),周期为千位分隔符和逗号作为小数分隔符,它可以转换为数字而不使用REPLACE或类似的东西。再次,使用TO_NUMBER和适当的参数,包括正确的格式模型:

select to_number('4.105,65', '999G999D9999', 'nls_numeric_characters = '',.''') 
                                                                  as num from dual;

       NUM
----------
   4105.65

然后将TO_NUMBER的输出作为第一个插图中TO_CHAR的输入。