TO_CHAR功能逻辑&lt; <数字格式=“”>&gt;

时间:2017-02-15 06:09:44

标签: sql oracle

我是oracle的新手,发现了一些难以理解的东西。虽然我理解TO_CHAR的功能,但我对数字格式模型的概念不熟悉。请帮助我理解下面的逻辑。

select TRIM(substr(TO_CHAR (160, '000'),1,3)) from dual;
Output -> 16

select TRIM(substr(TO_CHAR (160),1,3)) from dual;
Output -> 160
  

对于第一个查询,为什么oracle返回值16而不是   160?

3 个答案:

答案 0 :(得分:2)

使用FM启动格式字符串,例如'FM000'
如果没有FM,则会为减号保存前面的空格。

select  '|' || to_char(160,'000')   || '|'     as no_FM
       ,'|' || to_char(160,'FM000') || '|'     as with_FM

from    dual
+--------+---------+
| NO_FM  | WITH_FM |
+--------+---------+
| | 160| | |160|   |
+--------+---------+

答案 1 :(得分:2)

有趣。试过这个:

select to_char(160, '000')
      ,substr(to_char(160, '000'), 1, 3)
      ,substr('160', 1, 3)
      ,length(to_char(160, '000'))
  from dual;

这给了我160,16,160,4

子字符串为您提供字符串的前3个字符。 to_char(160,'000')的第一个字符是空格。一个地方留有减号。 因此substr(to_char(160,'000'),1,3)的值不是16而是space16。

答案 2 :(得分:0)

如果您尝试这样

select substr(TRIM(TO_CHAR (160, '000')),1,3) from dual;

输出 - &gt; 160

而不是:

select TRIM(substr(TO_CHAR (160, '000'),1,3)) from dual;