全部產品
Search
文件中心

MaxCompute:TO_CHAR

更新時間:Dec 16, 2025

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-%dyyyy-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:%Shh-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函數屬於日期函數或字串函數。

  • 更多日期計算、日期轉換的相關函數請參見日期函數

  • 更多尋找字串、轉換字串格式的相關函數請參見字串函數