TO_CHAR函數用於將不同類型資料轉換為STRING類型。分為字串類型和日期類型兩種。字串類型指的是將BOOLEAN、BIGINT、DECIMAL或DOUBLE類型值轉換為對應的STRING類型。日期類型指的是將日期按照指定格式轉換為字串。
BOOLEAN/BIGINT/DECIMAL/DOUBLE類型轉換
使用TO_CHAR函數將BOOLEAN、BIGINT、DECIMAL或DOUBLE類型值轉換為對應的STRING類型。
命令格式
STRING TO_CHAR(BOOLEAN|BIGINT|DOUBLE|DECIMAL <value>)
-- 標準樣本。
-- 返回123。
SELECT TO_CHAR(123);參數說明
value:必填。BOOLEAN、BIGINT、DECIMAL或DOUBLE類型。
傳回值說明
返回STRING類型。返回規則如下:
value非BOOLEAN、BIGINT、DECIMAL或DOUBLE類型時,返回報錯。
value值為NULL時,返回NULL。
使用樣本
基本樣本
樣本1:將如下值轉換為STRING類型。
-- 返回123。 SELECT TO_CHAR(123);樣本2:輸入參數為NULL,傳回值為NULL。
-- 返回NULL。 SELECT TO_CHAR(NULL);
日期類型轉換
使用TO_CHAR函數將時間日期資料按照指定格式及時區格式化為STRING字串。
命令格式
當使用時間日期類型資料作為輸入參數時,TO_CHAR函數支援以下兩種簽名格式,請根據不同使用需求選擇不同的函數簽名。
簽名1:將DATE或DATETIME類型日期值按照指定格式轉換為STRING字串。
STRING TO_CHAR(DATE|DATETIME <date>, STRING <format>) -- 標準樣本。 -- 返回2025-03-05。 SELECT TO_CHAR(DATETIME '2025-03-05 14:30:00', 'yyyy-mm-dd');簽名2:將TIMESTAMP或TIMESTAMP_NTZ類型時間按照指定時區及指定格式,轉換為STRING字串。
STRING TO_CHAR(TIMESTAMP|TIMESTAMP_NTZ <date>, STRING <format>[, STRING <time_zone>]) -- 標準樣本。 -- 返回2025-07-20 07:30:00。 SELECT TO_CHAR(TIMESTAMP '2025-07-20 07:30:00', '%Y-%m-%d %H:%M:%S');
參數說明
date:必填。待格式化的日期值。支援DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ類型。
在MaxCompute1.0資料類型版本下,如果參數為STRING類型,格式符合DATETIME類型的格式,即
yyyy-mm-dd hh:mi:ss,例如2025-07-21 00:00:00,則會隱式轉換為DATETIME類型後參與運算。format:必填。用於指定輸出的字串格式。STRING類型。format目前支援的日期和時間部分的格式元素如下:
日期部分格式元素
%Y/yyyy/YYYY:以十進位數表示的年份和世紀。%y:以十進位數(00~99)表示的年份(不帶世紀)。%m/mm/MM:以十進位數表示的月份(01~12)。%B:完整的月份名稱(英文),例如January。%b/%h:月份名稱(英文)的縮寫,例如Jan。%d/dd/DD:以十進位數表示的月份日期 (01~31)。%e:以十進位數字(1~31)表示的月份中的第幾天,例如2(其中dd將得到02)。%F:相當於%Y-%m-%d(yyyy-mm-dd)。%j:以十進位數表示的一年中的第幾天(001~366),例如360。%u:一周中的第幾天(Monday=1),以十進位數(1~7)表示。%A:完整的星期名稱(英文),例如Wednesday。%a:星期名稱(英文)的縮寫,例如Wed。
時間部分格式元素
%p:AM/PM,即上午/下午。%H/hh/HH:以十進位數(00~23)表示的小時(24 小時制)。%I:以十進位數字(01~12)表示的小時(12小時制)。%l:以十進位數字(1~12)表示的小時(12小時制);無十位元時,個位元前面有空格。%M/mi/MI:以十進位數(00~59)表示的分鐘。%S/ss/SS:以十進位數(00~60)表示的秒。%X:相當於HH:MM:SS格式的時間。%T:相當於%H:%M:%S(hh-mi-ss)。ff3:毫秒,為三位十進位數(000~999),用於表示秒的小數部分。%E<number>S:秒,小數精度為<number>位,例如用%E3S匹配00.123。%E*S:有完整6位小數精度的秒,例如00.123456。%Ez:表示數字時區(+HH:MM或-HH:MM)。
time_zone:可選。STRING類型。用於指定時區,詳情請參見時區列表。
若未指定時區:
當date為TIMESTAMP類型時,預設為當前Session/Project時區。
當date為TIMESTAMP_NTZ類型時,預設為UTC時區。
傳回值說明
返回STRING類型。返回規則如下:
date非DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ類型時,返回報錯。
date值為NULL時,返回報錯。
format值為NULL時,返回NULL。
使用樣本
基本樣本
樣本1:入參為DATE或DATETIME類型。
-- 返回今天是2023-12-25。 SELECT TO_CHAR(DATE "2023-12-25", "今天是yyyy-mm-dd"); -- 返回今天是20231225。 SELECT TO_CHAR(DATE "2023-12-25", "今天是%Y%m%d"); -- 返回今天是231225Monday。 SELECT TO_CHAR(DATE "2023-12-25", "今天是%y%m%d%A"); -- 返回今天是 12月25日。 SELECT TO_CHAR(DATE "2023-12-25", "今天是 MM月DD日"); -- 返回阿里金融2010-12*03。 SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00','阿里金融yyyy-mm*dd'); -- 返回時間是15:30:00。 SELECT TO_CHAR(DATETIME '2025-07-18 15:30:00','時間是%X'); -- 返回現在是 3:30:00 PM。 SELECT TO_CHAR(DATETIME '2025-07-18 15:30:00','現在是%l:%M:%S %p'); -- 返回小時部分是03。 SELECT TO_CHAR(DATETIME '2025-07-18 15:30:00','小時部分是%I'); -- 返回25年的第189天,July(Jul|Jul)月,08(8)日,Tuesday(Tue),15:30:00 PM。 SELECT TO_CHAR(DATETIME '2025-07-08 15:30:00','%y年的第%j天,%B(%b|%h)月,dd(%e)日,%A(%a),%T %p'); -- 返回日期為2025-07-08是一周的第2天。 SELECT TO_CHAR(DATETIME '2025-07-08 15:30:00','日期為%F是一周的第%u天'); -- 返回NULL。 SELECT TO_CHAR(DATE "2023-12-25", NULL);樣本2:入參為STRING類型。
對於MaxCompute 1.0資料類型版本,若date參數為STRING類型,且格式符合DATETIME類型的格式
yyyy-mm-dd hh:mi:ss,則會隱式轉換為DATETIME類型後參與運算。-- 設定資料類型版本為1.0。 SET odps.sql.type.system.odps2=false; SET odps.sql.hive.compatible=false; -- 輸入參數為STRING類型,且符合DATETIME類型格式。 -- 返回20250718。 SELECT TO_CHAR('2025-07-18 00:00:00', 'yyyymmdd');樣本3:入參為TIMESTAMP類型。
當參數是TIMESTAMP類型時,支援指定時區。若未指定時區,則預設為當前Session/Project時區。
-- 當前Project時區為Asia/Shanghai。 SET odps.sql.timezone=Asia/Shanghai; -- 返回2025-07-20 07:30:00.123456。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00.123456", "%Y-%m-%d %H:%M:%E*S"); -- 返回2025-07-20 07:30:00+08:00。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00", "%Y-%m-%d %H:%M:%S%Ez"); -- 返回2025-07-20 07:30:00。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00", "%Y-%m-%d %H:%M:%S", "Asia/Shanghai"); -- 返回20250720 06:30:00。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00", "yyyymmdd hh:mi:ss", "Asia/Bangkok"); -- 返回2025-07-20 09:30:00.123。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00.123456789", "%Y-%m-%d %H:%M:%S.ff3", "Australia/Sydney"); -- 返回2025-07-19 23:30:00。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00.123456", "%Y-%m-%d %H:%M:%S", "Etc/GMT"); -- 返回2025-07-19 23:30:00Saturday。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00.123456", "%Y-%m-%d %H:%M:%S%A", "Etc/GMT"); -- 返回NULL。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00.123456", NULL, "Etc/GMT");樣本4:入參為TIMESTAMP_NTZ類型。
當參數是TIMESTAMP_NTZ類型時,支援指定時區。若未指定時區,TIMESTAMP_NTZ類型資料本身不包含時區資訊,代表基於統一UTC時間基準。
-- 返回日期時間是2025-07-20 07:30:00.123456。 SELECT TO_CHAR(TIMESTAMP_NTZ "2025-07-20 07:30:00.123456" ,"日期時間是%Y-%m-%d %H:%M:%E6S"); -- 返回2025-07-20 07:30:00。 SELECT TO_CHAR(TIMESTAMP_NTZ "2025-07-20 07:30:00", "%Y-%m-%d %H:%M:%S","Etc/GMT"); -- 返回2025-07-20 Sunday 15:30:00。 SELECT TO_CHAR(TIMESTAMP_NTZ "2025-07-20 07:30:00", "yyyy-mm-dd %A hh:mi:ss", "Asia/Shanghai"); - -- 返回2025-07-20 14:30:00毫秒部分為123。 SELECT TO_CHAR(TIMESTAMP_NTZ "2025-07-20 07:30:00.123456789", "yyyy-mm-dd hh:mi:ss毫秒部分為ff3", "Asia/Bangkok"); -- 返回NULL。 SELECT TO_CHAR(TIMESTAMP_NTZ "2025-07-20 07:30:00", NULL);
相關函數
TO_CHAR函數屬於日期函數或字串函數。