我使用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,包括小数点。
请帮助理解原因。
此致 摩尼
答案 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'
记下号码前的空格。