RPAD TO_CHAR提供意外输出 - Oracle

时间:2013-07-17 09:33:33

标签: sql oracle numbers padding to-char

我使用rpad,nvl和to_char组合获得了数字数据类型的意外输出。

以下是我的查询并在Oracle(Oracle Database 11g版本11.2.0.3.0)中执行:

SELECT RPAD(NVL(TO_CHAR(122.85,'000.000'),''),6)FROM dual

输出:  122.8(注:确切输出:122.8)

我怀疑,为什么最后一个字符5)被截断了?长度仍为6,包括小数点。

请帮助理解原因。

此致 摩尼

4 个答案:

答案 0 :(得分:1)

TO_CHAR(122.85,'000.000')返回> 122.850<前面有空白区域。为标志保留空白区域。 您需要格式字符串中的FM修饰符:TO_CHAR(122.85,'FM000.000')

SELECT RPAD(NVL(TO_CHAR(122.85,'FM000.000'),' '),6) FROM dual

答案 1 :(得分:0)

这不是截断,它就在那里 但它是一个空间,你看不到它;)

SELECT RPAD(NVL(TO_CHAR(122.85,'000.000'),' '),6) x,
       length( RPAD(NVL(TO_CHAR(122.85,'000.000'),' '),6)) l,
       dump( RPAD(NVL(TO_CHAR(122.85,'000.000'),' '),6) ) dmp
FROM dual;

X               L DMP 
------ ---------- --------------------------------
 122.8          6 Typ=1 Len=6: 32,49,50,50,46,56 

http://www.techonthenet.com/oracle/functions/rpad.php

RPAD(string,padded_length [,pad_string])

pad_string是可选的,如果你没有指定它,oracle会假设一个空格。

答案 2 :(得分:0)

不知何故,这个TO_CHAR在您的号码左侧添加了一个空格。我建议你使用以下内容:

SELECT RPAD(LTRIM(NVL(TO_CHAR(122.85,'000.000'),'')), 6)
FROM dual

答案 3 :(得分:0)

代码

SELECT NVL(TO_CHAR(122.85,'000.000'),' ') from dual;

返回'122.850'

记下号码前的空格。