全部產品
Search
文件中心

MaxCompute:TRUNC_TIME

更新時間:Dec 02, 2025

TRUNC_TIME函數用於將指定的日期或時間類型資料按date_part所指定的時間單位進行截斷,返回STRING類型資料。

命令格式

STRING TRUNC_TIME(DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ <date>, STRING <date_part>)

-- 標準樣本。
-- 返回2025-06。
SELECT TRUNC_TIME(DATETIME '2025-06-10 14:20:30', 'month');

參數說明

  • date:必填。日期或時間戳記。支援DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ類型。

    MaxCompute1.0資料類型版本下,輸入參數可以為STRING類型,時間格式需符合DATETIME類型,即yyyy-mm-dd hh:mi:ss,例如2025-07-21 00:00:00,會隱式轉換為DATETIME類型後參與運算。

  • date_part:必填。指定截斷的時間單位。STRING類型常量,忽略大小寫,支援year(年)、month(月)、day(日)和hour(小時)。

傳回值說明

返回STRING類型。具體格式取決於date_part的取值:

對於時區相關的資料類型,如DATETIME/TIMESTAMP,TRUNC_TIME函數會先將本地時間轉換為UTC時間,然後再按照date_part進行截取計算,將結果轉換為STRING類型返回。
  • date_part取值為'year':返回STRING格式為yyyy

  • date_part取值為'month':返回STRING格式為yyyy-mm

  • date_part取值為'day':返回STRING格式為yyyy-mm-dd

  • date_part取值為'hour':返回STRING格式為yyyy-mm-dd hh:mm:ss

返回規則如下:

  • date為非DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ類型時,返回報錯。

  • date_part為NULL時,返回報錯。

使用樣本

  • 樣本1:時間為DATETIME類型。

    例如當前Session或者Project時區為東八區,本地時間是DATETIME '2025-06-03 07:15:08',TRUNC_TIME函數會先將本地時間轉換為UTC時間'2025-06-02 23:15:08',然後按照date_part截取計算,將結果轉換為STRING類型返回。

    SET odps.sql.timezone=Asia/Shanghai;
    SELECT 
           TRUNC_TIME(DATETIME '2025-06-03 07:15:08','year') AS tc_year,
           TRUNC_TIME(DATETIME '2025-06-03 07:15:08','month') AS tc_month,
           TRUNC_TIME(DATETIME '2025-06-03 07:15:08','day') AS tc_date,
           TRUNC_TIME(DATETIME '2025-06-03 07:15:08','hour') AS tc_hour;
           
    -- 返回結果。
    +------------+------------+------------+------------+
    | tc_year    | tc_month   | tc_date    | tc_hour    |
    +------------+------------+------------+------------+
    | 2025       | 2025-06    | 2025-06-02 | 2025-06-02 23:00:00 |
    +------------+------------+------------+------------+
  • 樣本2:時間為DATE類型。

    例如輸入時間是DATE '2025-06-10',TRUNC_TIME函數會將DATE類型資料按照date_part指定的時間單位截取後,返回STRING類型。

    SELECT 
           TRUNC_TIME(DATE '2025-06-10','year' ),
           TRUNC_TIME(DATE '2025-06-10','month' ),
           TRUNC_TIME(DATE '2025-06-10','day' );
    
    -- 返回結果。
    +------------+------------+------------+
    | _c0        | _c1        | _c2        |
    +------------+------------+------------+
    | 2025       | 2025-06    | 2025-06-10 |
    +------------+------------+------------+
  • 樣本3:時間為STRING類型。

    例如輸入時間為STRING類型'2025-06-03 15:30:30',需要設定MaxCompute專案的資料類型版本為1.0,才會隱式轉換為DATETIME類型後參與運算,否則會報錯。

    -- 當前Session或者Project時區為東八區。
    SET odps.sql.timezone=Asia/Shanghai;
    -- 設定資料類型版本為1.0。
    SET odps.sql.type.system.odps2=false;
    
    -- 時間先轉換為UTC時間,然後再按照小時'hour'進行截取計算。
    SELECT TRUNC_TIME('2025-06-03 15:30:30','hour');
    
    -- 返回結果。
    +------------+
    | _c0        |
    +------------+
    | 2025-06-03 07:00:00 |
    +------------+

相關函數

TRUNC_TIME函數屬於日期函數,更多日期計算、日期轉換的相關函數請參見日期與時間函數