对于数字数据类型,我使用 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) 被截断了?长度仍然是六,包括小数点。
请帮助了解原因。
问候,玛尼
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
The code
SELECT NVL(TO_CHAR(122.85,'000.000'),' ') from dual;
return ' 122.850'
note the space before the number.
它不是截断的,它就在那里。
但它是一个空间,你看不到它;)
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 会假设一个空格。
不知何故,这个 TO_CHAR 在您的号码左侧添加了一个空格。我建议您使用以下内容:
SELECT RPAD(LTRIM(NVL(TO_CHAR(122.85,'000.000'),'')), 6)
FROM dual