在这篇博客SQL挑战——如何高效生成编码里面我由于需要将数字格式化为字符,像12需要格式化0012这样的字符,所以使用了TO_CHAR(数字,'0000')这样的写法,后面0000表示缺省补零,测试过程中,我发发现TO_CHAR(number,'0000') 会多一个空格。有点纳闷为什么了会多一个空格。

ORACLE TO_CHAR函数格式化数字的出现空格的原因

后面经过查看官方文档、同事讨论以及网友提供的资料,终于把这个问题给弄清楚了。下面梳理、总结于此,希望对其它人有所帮助。

在官方文档https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570里面你能看到一段介绍

Number Format Elements

A number format model is composed of one or more number format elements. The tables that follow list the elements of a number format model and provide some examples.

Negative return values automatically contain a leading negative sign and positive values automatically contain a leading space unless the format model contains the MI, S, or PR format element.

注意红色部分,意思是Number类型转换为字符时,负数会返回前面包含负号的字符串,正数则会返回前面包含空格的字符串,除非格式模式包含MI、S、或PR元素。查看TO_CHAR(4, '0000')返回的字符串长度,你会发现其长度为5.

FROM DUAL;
   2:  
   3: TO_CH
--
 0004
   6:  
FROM DUAL;
   8:  
'0000'))
--
                        5
  12:  
FROM DUAL;
  14:  
  15: TO_CH
--
-0004

相关文章: