為將不同資料類型(包括日期/時間,整數,浮點數,數值)轉換成格式化後的字元和將格式化後的字串轉換為特定的資料類型,PolarDB的格式化函數提供了很多功能強大的工具。
下面列出了這些格式化函數都遵循通用的呼叫慣例:第一個參數是需要格式化的值;第二個參數是字串模板,用於定義輸出或輸入的格式。
| 函數 | 傳回型別 | 說明 | 樣本 | 結果 |
| TO_CHAR(DATE [, format ]) | VARCHAR2 | 將日期/時間轉換為 format 指定格式的字串輸出。如果省略,則預設格式為 DD-MON-YY | TO_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中可以用來格式化數值的模板模式。
| 模式 | 說明 |
| 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 | 年份的後一位元 |
| IYYY | ISO 年(4 位及更多位元) |
| IYY | ISO 年份的後三位元 |
| IY | ISO 年份的後兩位元 |
| I | ISO 年份的後一位元 |
| 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 | 年份的前兩位元(在僅給定年份的後兩位元時)。結果基於使用當前年份和給定的兩位元年份的演算法。給定的兩位元年份的前兩位元將與當前年份的前兩位元相同,但以下情況除外:
|
| RRRR | 僅影響 TO_DATE 函數。允許兩位元或四位元年份規範。如果給定兩位元年份,則返回年份的前兩位元字,如 RR 格式。如果給定 4 位元年份,則返回給定的 4 位元年份。 |
某些修改者可以應用到任何模板模式,以用來修改它的行為。例如,FMMonth是帶有FM修改者的Month模式。下面的表顯示了針對日期/時間格式的模式修改者。
| 修飾符 | 說明 | 樣本 |
| 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。
下面的表格顯示了格式化數值時可以使用的模板模式。
| 模式 | 說明 |
| 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' |