我在表格中有一列,其值如下:
105,65
106,8
107
108,1234
现在我必须以16,4格式输出它,删除逗号。
我试过
REPLACE(RPAD(LPAD(AMOUNT, 16, '0'), 20, '0'), ',', '')
但它始终向右填充4个零,这不是预期的结果。如果逗号后面有4个字符,则不应该正确填充零。
如果可以在一个SQL语句中完成它对我有帮助。 此外,当我替换逗号时,它正在减少一个字符。
答案 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的输入。