簡體   English   中英

TO_CHAR函數邏輯&lt; <Number format> &gt;

[英]TO_CHAR function logic <<Number format>>

我是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?

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|   |
+--------+---------+

有趣。 試過這個:

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。

如果你這樣嘗試

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

輸出-> 160

代替這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM