全部產品
Search
文件中心

PolarDB:格式化函數(數字、字元、日期類型)

更新時間:Jul 06, 2024

為將不同資料類型(包括日期/時間,整數,浮點數,數值)轉換成格式化後的字元和將格式化後的字串轉換為特定的資料類型,PolarDB的格式化函數提供了很多功能強大的工具。

下面列出了這些格式化函數都遵循通用的呼叫慣例:第一個參數是需要格式化的值;第二個參數是字串模板,用於定義輸出或輸入的格式。

表 1. 格式化函數
函數傳回型別說明樣本結果
TO_CHAR(DATE [, format ])VARCHAR2將日期/時間轉換為 format 指定格式的字串輸出。如果省略,則預設格式為 DD-MON-YYTO_CHAR(SYSDATE, 'MM/DD/YYYY HH12:MI:SS AM')07/25/2007 09:43:02 AM
TO_CHAR(INTEGER [, format ])VARCHAR2將整數轉換為 format 指定格式的字串輸出TO_CHAR(2412, '999,999S')2,412+
TO_CHAR(NUMBER [, format ])VARCHAR2將十進位數轉換為 format 指定格式的字串輸出TO_CHAR(10125.35, '999,999.99')10,125.35
TO_CHAR(DOUBLE PRECISION, format)VARCHAR2將浮點數轉換為 format 指定格式的字串輸出TO_CHAR(CAST(123.5282 AS REAL), '999.99')123.53
TO_DATE(string [, format ])DATE將日期格式化字串轉換為 DATE 資料類型TO_DATE('2007-07-04 13:39:10', 'YYYY-MM-DD HH24:MI:SS')04-JUL-07 13:39:10
TO_NUMBER(string [, format ])NUMBER將數字格式化字串轉換為 NUMBER 資料類型TO_NUMBER('2,412-', '999,999S')-2412
TO_TIMESTAMP(string, format)TIMESTAMP將時間戳記格式化字串轉換為 TIMESTAMP 資料類型TO_TIMESTAMP('05 Dec 2000 08:30:25 pm', 'DD Mon YYYY hh12:mi:ss pm')05-DEC-00 20:30:25

在TO_CHAR函數的輸出模板字串中,這裡有固定的模式可以識別,並且由格式化的數值所替代,而任何不是標準模式的文字是簡單的逐字拷貝。類似的情況,在一個輸入模板字串中(對除了TO_CHAR以外的其他函數),模板模式能夠標識出輸入字串的部分和要尋找的值。

下面的表顯示了在函數TO_CHAR和TO_DATE中可以用來格式化數值的模板模式。

表 2. 模板日期/時間格式模式
模式說明
HH一天中的小時 (01-12)
HH12一天中的小時 (01-12)
HH24一天中的小時 (00-23)
MI分鐘 (00-59)
SS秒 (00-59)
SSSSS午夜過後的秒 (0-86399)
AM 或 A.M. 或者 PM 或 P.M.午時指示符(大寫)
am 或 a.m. 或者 pm 或 p.m.午時指示符(小寫)
Y,YYY帶逗號的年份(4 位及更多位元)
YEAR年份(完整拼字)
SYEAR年份(完整拼字)(前面附加了減號的 BC 日期)
YYYY年份(4 位及更多位元)
SYYYY年份(4 位及更多位元)(前面附加了減號的 BC 日期)
YYY年份的後三位元
YY年份的後兩位元
Y年份的後一位元
IYYYISO 年(4 位及更多位元)
IYYISO 年份的後三位元
IYISO 年份的後兩位元
IISO 年份的後一位元
BC 或 B.C. 或者 AD 或 A.D.紀元指示符(大寫)
bc 或 b.c. 或者 ad 或 a.d.紀元指示符(小寫)
MONTH完整的大寫月份名稱
Month完整的混合大小寫月份名稱
month完整的小寫月份名稱
MON縮寫的大寫月份名稱(英文為 3 個字元,本地化後長度不同)
Mon縮寫的混合大小寫月份名稱(英文為 3 個字元,本地化後長度不同)
mon縮寫的小寫月份名稱(英文為 3 個字元,本地化後長度不同)
MM月份編號 (01-12)
DAY完整的大寫日名稱
Day完整的混合大小寫日名稱
day完整的小寫日名稱
DY縮寫的大寫日名稱(英文為 3 個字元,本地化後長度不同)
Dy縮寫的混合大小寫日名稱(英文為 3 個字元,本地化後長度不同)
dy縮寫的小寫日名稱(英文為 3 個字元,本地化後長度不同)
DDD年中日期(001-366)
DD每月幾號 (01-31)
D星期幾(1-7;星期日為 1)
W每月第幾周(1-5)(第一周從月的第一天開始)
WW一年中的周編號 (1-53)(第一周從一年的第一天開始)
IW一年中的 ISO 周編號;新年的第一個星期四在第 1 周中
CC世紀(兩位元);21 世紀從 2001-01-01 開始
SCC與 CC 相同,但 BC 日期以減號為首碼
J朱利安日(自公元前 4712 年 1 月 1 日起)
Q季度
RM用羅馬數字表示的月份(I-XII;I= 1 月)(大寫)
rm用羅馬數字表示的月份(i-xii;i= 1 月)(小寫)
RR年份的前兩位元(在僅給定年份的後兩位元時)。結果基於使用當前年份和給定的兩位元年份的演算法。給定的兩位元年份的前兩位元將與當前年份的前兩位元相同,但以下情況除外:
  • 如果給定的兩位元年份 < 50 且當前年份的最後兩位元 >= 50,則給定年份的前兩位元比當前年份的前兩位元大 1。
  • 如果給定的兩位元年份 >= 50 且當前年份的最後兩位元 < 50,則給定年份的前兩位元比當前年份的前兩位元小 1。
RRRR僅影響 TO_DATE 函數。允許兩位元或四位元年份規範。如果給定兩位元年份,則返回年份的前兩位元字,如 RR 格式。如果給定 4 位元年份,則返回給定的 4 位元年份。
某些修改者可以應用到任何模板模式,以用來修改它的行為。例如,FMMonth是帶有FM修改者的Month模式。下面的表顯示了針對日期/時間格式的模式修改者。
表 3. 日期/時間格式的模板模式修飾符
修飾符說明樣本
FM 首碼填充模式(禁止填充空格和零)FMMonth
TH 尾碼大寫序號尾碼DDTH
th 尾碼小寫序號尾碼DDth
FX 首碼固定格式全域選項(參見使用說明)FX Month DD Day
SP 尾碼拼字模式DDSP
說明
  • FM壓縮前面的0和尾部的空格,這些0和空格用於使輸出符合固定寬度的模式。
  • 如果沒有使用FX選項,TO_TIMESTAMP和TO_DATE跳過輸入字串中的多個空格。必須將Fx指定為模板中第一個成員。例如TO_TIMESTAMP('2000 JUN', 'YYYY MON')這種方式是正確的,但是TO_TIMESTAMP('2000 JUN', 'FXYYYY MON')會返回錯誤,因為TO_TIMESTAMP只是期望一個空格。
  • 在TO_CHAR函數中允許使用普通文本,並且函數的輸出也是以文本方式實現的。
  • 在把字串從類型timestamp 轉換到date的過程中,如果這裡有YYY,YYYY,或者是Y,YYY欄位,那麼CC欄位可以忽略。如果使用了帶有YY或者Y欄位的CC值,那麼年的計算方式就是(CC-1)*100+YY
下面的表格顯示了格式化數值時可以使用的模板模式。
表 4. 用於數字格式化的模板模式
模式說明
9具有指定位元的值
0帶前置字元為零的值
.(句點)小數點
,(逗號)組(千位)分隔字元
$貨幣符號
PR角括弧中的負值
S錨定到數位符號(使用地區設定)
L貨幣符號(使用地區設定)
D小數點(使用地區設定)
G組分隔字元(使用地區設定)
MI在最右側位置指定的減號(如果數字 < 0)
RN 或 rn羅馬數字(1 到 3999 之間的輸入)
V移位指定的位元(參閱注釋)
說明
  • 數字9產生的值和9s的一樣,如果沒有指定數位話,那麼輸出空格。
  • TH不轉換小於0的值,並且不轉換小數值。

V有效地用10n和輸入值相乘,其中n是V.TO_CHAR後面數位數量。在這裡不支援使用V和小數點組合(例如,不允許使用99.9V99這種形式)。

下面的表顯示了一些使用TO_CHAR和TO_DATE函數的樣本。
運算式結果
TO_CHAR(CURRENT TIMESTAMP, 'Day, DD HH12:MI:SS')'Tuesday , 06 05:39:18'
TO_CHAR(CURRENT TIMESTAMP, 'FMDay, FMDD HH12:MI:SS')'Tuesday, 6 05:39:18'
TO_CHAR(-0.1, '99.99')' -.10'
TO_CHAR(-0.1, 'FM9.99')'-.1'
TO_CHAR(0.1, '0.9')' 0.1'
TO_CHAR(12, '9990999.9')' 0012.0'
TO_CHAR(12, 'FM9990999.9')'0012.'
TO_CHAR(485, '999')' 485'
TO_CHAR(-485, '999')' -485'
TO_CHAR(1485, '9,999')' 1,485'
TO_CHAR(1485, '9G999')' 1,485'
TO_CHAR(148.5, '999.999')' 148.500'
TO_CHAR(148.5, 'FM999.999')'148.5'
TO_CHAR(148.5, 'FM999.990')'148.500'
TO_CHAR(148.5, '999D999')' 148.500'
TO_CHAR(3148.5, '9G999D999')' 3,148.500'
TO_CHAR(-485, '999S')'485- '
TO_CHAR(-485, '999MI')'485- '
TO_CHAR(485, '999MI')'485 '
TO_CHAR(4 85, 'FM999MI')'485'
TO_CHAR(-485, '999PR')'<485>'
TO_CHAR(485, 'L999')'$ 485'
TO_CHAR(4 85, 'RN')' CDLXXXV'
TO_CHAR(4 85, 'FMRN')'CDLXXXV'
TO_CHAR(5.2, 'FMRN')'V'
TO_CHAR(12, '99V999')' 12000'
TO_CHAR(12.4, '99V999')' 12400'
TO_CHAR(12.45, '99V9')' 125'