我是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?
答案 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;
输出 - > 160
而不是:
select TRIM(substr(TO_CHAR (160, '000'),1,3)) from dual;