0

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

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

选择 RPAD(NVL(TO_CHAR(122.85,'000.000'),' '),6) 从双

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

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

请帮助了解原因。

问候,玛尼

4

4 回答 4

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
于 2013-07-17T09:50:40.187 回答
0

The code

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

return ' 122.850'

note the space before the number.

于 2013-07-17T09:53:24.497 回答
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 会假设一个空格。

于 2013-07-17T09:48:11.943 回答
0

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

SELECT RPAD(LTRIM(NVL(TO_CHAR(122.85,'000.000'),'')), 6)
FROM dual
于 2013-07-17T09:50:18.197 回答