全部產品
Search
文件中心

MaxCompute:日期與時間函數

更新時間:Jun 19, 2025

本文為您介紹MaxCompute支援的日期函數,包括日期函數的命令格式、參數說明和使用樣本。您可以根據實際需要選擇合適的日期函數,以完成日期計算或轉換。

函數

功能

ADD_MONTHS

計算日期值增加指定月數後的日期。

CURRENT_TIMESTAMP

返回當前TIMESTAMP類型的時間戳記。

CURRENT_TIMEZONE

返回當前系統的時區值。

DATE_ADD

按照指定的幅度增減天數(僅支援以日為單位增減),與date_sub的增減邏輯相反。

DATEADD

按照指定的單位(支援以年、月、日、時、分或秒為單位)和幅度修改日期值。

DATE_FORMAT

將日期值轉換為指定格式的字串。

DATE_SUB

按照指定的幅度增減天數,與date_add的增減邏輯相反。

DATEDIFF

計算兩個日期的差值並按照指定的單位表示。

DATEPART

提取日期中符合指定時間單位的欄位值。

DATETRUNC

提取日期按照指定時間單位截取後的值。

DAY

返回日期值的天。

DAYOFMONTH

返回日部分的值。

DAYOFWEEK

返回日期的星期值。

DAYOFYEAR

返回日期是當年中第幾天。

EXTRACT

擷取日期TIMESTAMP中指定單位的部分。

FROM_UNIXTIME

將數字型的UNIX值轉換為日期值。

FROM_UTC_TIMESTAMP

將一個UTC時區的時間戳記轉換為一個指定時區的時間戳記。

GETDATE

擷取當前系統時間。

HOUR

返回日期小時部分的值。

ISDATE

判斷一個日期文字能否根據指定的格式串轉換為一個日期值。

LAST_DAY

返回日期值所在月份的最後一天日期。

LASTDAY

擷取日期所在月的最後一天。

MINUTE

返回日期分鐘部分的值。

MONTH

返回日期值所屬月份。

MONTHS_BETWEEN

返回指定日期值間的月數。

NEXT_DAY

返回大於日期值且與指定周相匹配的第一個日期。

NOW

返回當前系統日期與時間。

QUARTER

返回日期值所屬季度。

SECOND

返回日期秒數部分的值。

TO_CHAR

將日期按照指定格式轉換為字串。

TO_DATE

將指定格式的字串轉換為日期值。

TO_MILLIS

將指定日期轉換為以毫秒為單位的UNIX時間戳記。

TRUNC_TIME

將日期或時間類型資料按照datepart指定的時間單位進行截取後,返回STRING類型資料。

UNIX_TIMESTAMP

將日期轉換為整型的UNIX格式的日期值。

WEEKDAY

返回日期值是當前周的第幾天。

WEEKOFYEAR

返回日期值位於當年的第幾周。

YEAR

返回日期值的年。

注意事項

升級到MaxCompute 2.0後,產品擴充了部分函數。如果您用到的函數涉及新資料類型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用擴充函數時,需要執行如下語句開啟新資料類型開關:

  • Session層級:如果使用新資料類型,您需要在SQL語句前加上語句set odps.sql.type.system.odps2=true;,並與SQL語句一起提交執行。

  • Project層級:Project Owner可根據需要對Project進行設定,等待10~15分鐘後才會生效。命令如下。

    setproject odps.sql.type.system.odps2=true; 

    setproject的詳細說明請參見專案空間操作。關於開啟Project層級資料類型的注意事項,請參見資料類型版本說明

樣本資料

為便於理解各函數的使用方法,本文為您提供來源資料,基於來源資料提供函數相關樣本。建立表mf_date_fun_t,並添加資料,命令樣本如下。

CREATE TABLE IF NOT EXISTS mf_date_fun_t(
    id      INT,
    date1   DATE,
    datetime1   DATETIME,
    timestamp1 TIMESTAMP,
    date2   DATE,
    datetime2   DATETIME,
    timestamp2 TIMESTAMP,
    date3 STRING,
    date4 BIGINT);
    
INSERT INTO mf_date_fun_t VALUES 
(1,DATE'2021-11-29',DATETIME'2021-11-29 00:01:00',TIMESTAMP'2021-01-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-20',123456780),
(2,DATE'2021-11-28',DATETIME'2021-11-28 00:02:00',TIMESTAMP'2021-02-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-21',123456781),
(3,DATE'2021-11-27',DATETIME'2021-11-27 00:03:00',TIMESTAMP'2021-03-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-22',123456782),
(4,DATE'2021-11-26',DATETIME'2021-11-26 00:04:00',TIMESTAMP'2021-04-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-23',123456783),
(5,DATE'2021-11-25',DATETIME'2021-11-25 00:05:00',TIMESTAMP'2021-05-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-24',123456784),
(6,DATE'2021-11-24',DATETIME'2021-11-24 00:06:00',TIMESTAMP'2021-06-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-25',123456785),
(7,DATE'2021-11-23',DATETIME'2021-11-23 00:07:00',TIMESTAMP'2021-07-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-26',123456786),
(8,DATE'2021-11-22',DATETIME'2021-11-22 00:08:00',TIMESTAMP'2021-08-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-27',123456787),
(9,DATE'2021-11-21',DATETIME'2021-11-21 00:09:00',TIMESTAMP'2021-09-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-28',123456788),
(10,DATE'2021-11-20',DATETIME'2021-11-20 00:10:00',TIMESTAMP'2021-10-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-29',123456789);

查詢表mf_date_fun_t中的資料,命令樣本如下:

SELECT * FROM mf_date_fun_t;

返回結果如下。

+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+
| id         | date1      | datetime1           | timestamp1              | date2      | datetime2           | timestamp2              | date3      | date4      |
+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+
| 1          | 2021-11-29 | 2021-11-29 00:01:00 | 2021-01-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-20 | 123456780  |
| 2          | 2021-11-28 | 2021-11-28 00:02:00 | 2021-02-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-21 | 123456781  |
| 3          | 2021-11-27 | 2021-11-27 00:03:00 | 2021-03-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-22 | 123456782  |
| 4          | 2021-11-26 | 2021-11-26 00:04:00 | 2021-04-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-23 | 123456783  |
| 5          | 2021-11-25 | 2021-11-25 00:05:00 | 2021-05-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-24 | 123456784  |
| 6          | 2021-11-24 | 2021-11-24 00:06:00 | 2021-06-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-25 | 123456785  |
| 7          | 2021-11-23 | 2021-11-23 00:07:00 | 2021-07-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-26 | 123456786  |
| 8          | 2021-11-22 | 2021-11-22 00:08:00 | 2021-08-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-27 | 123456787  |
| 9          | 2021-11-21 | 2021-11-21 00:09:00 | 2021-09-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-28 | 123456788  |
| 10         | 2021-11-20 | 2021-11-20 00:10:00 | 2021-10-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-29 | 123456789  |
+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+

ADD_MONTHS

  • 命令格式

    STRING ADD_MONTHS(DATE|DATETIME|TIMESTAMP|STRING <startdate>, INT <num_months>)
  • 命令說明

    返回開始日期startdate增加num_months個月後的日期。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    參數

    是否必填

    說明

    startdate

    DATE、DATETIME、TIMESTAMP或STRING類型,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

    num_months

    INT型數值。

  • 傳回值說明

    返回STRING類型的日期值,格式為yyyy-mm-dd。返回規則如下:

    • startdate非DATE、DATETIME、TIMESTAMP或STRING類型,或格式不符合要求時,返回NULL。

    • startdate值為NULL時,返回報錯。

    • num_months值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回2017-05-14。
      SELECT ADD_MONTHS('2017-02-14',3);
      
      --返回0017-05-14。
      SELECT ADD_MONTHS('17-2-14',3);
      
      --返回2017-05-14。
      SELECT ADD_MONTHS('2017-02-14 21:30:00',3);
      
      --返回NULL。
      SELECT ADD_MONTHS('20170214',3);
      
      --返回NULL。
      SELECT ADD_MONTHS('2017-02-14 21:30:00',null);
    • 表資料樣本

      基於樣本資料,將date1、datetime1、timestamp1和date3列日期轉換為整型的UNIX格式的日期值,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             ADD_MONTHS(date1,1) AS date1_add_months, 
             datetime1, 
             ADD_MONTHS(datetime1, 2) AS datetime1_add_months, 
             timestamp1, 
             ADD_MONTHS(timestamp1,3) AS timestamp1_add_months, 
             date3, 
             ADD_MONTHS(date3,4) AS date3_add_months 
      FROM mf_date_fun_t;

      返回結果如下。

      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
      | date1      | date1_add_months | datetime1           | datetime1_add_months | timestamp1                    | timestamp1_add_months | date3      | date3_add_months |
      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
      | 2021-11-29 | 2021-12-29       | 2021-11-29 00:01:00 | 2022-01-29           | 2021-01-11 00:00:00.123456789 | 2021-04-11            | 2021-11-20 | 2022-03-20       |
      | 2021-11-28 | 2021-12-28       | 2021-11-28 00:02:00 | 2022-01-28           | 2021-02-11 00:00:00.123456789 | 2021-05-11            | 2021-11-21 | 2022-03-21       |
      | 2021-11-27 | 2021-12-27       | 2021-11-27 00:03:00 | 2022-01-27           | 2021-03-11 00:00:00.123456789 | 2021-06-11            | 2021-11-22 | 2022-03-22       |
      | 2021-11-26 | 2021-12-26       | 2021-11-26 00:04:00 | 2022-01-26           | 2021-04-11 00:00:00.123456789 | 2021-07-11            | 2021-11-23 | 2022-03-23       |
      | 2021-11-25 | 2021-12-25       | 2021-11-25 00:05:00 | 2022-01-25           | 2021-05-11 00:00:00.123456789 | 2021-08-11            | 2021-11-24 | 2022-03-24       |
      | 2021-11-24 | 2021-12-24       | 2021-11-24 00:06:00 | 2022-01-24           | 2021-06-11 00:00:00.123456789 | 2021-09-11            | 2021-11-25 | 2022-03-25       |
      | 2021-11-23 | 2021-12-23       | 2021-11-23 00:07:00 | 2022-01-23           | 2021-07-11 00:00:00.123456789 | 2021-10-11            | 2021-11-26 | 2022-03-26       |
      | 2021-11-22 | 2021-12-22       | 2021-11-22 00:08:00 | 2022-01-22           | 2021-08-11 00:00:00.123456789 | 2021-11-11            | 2021-11-27 | 2022-03-27       |
      | 2021-11-21 | 2021-12-21       | 2021-11-21 00:09:00 | 2022-01-21           | 2021-09-11 00:00:00.123456789 | 2021-12-11            | 2021-11-28 | 2022-03-28       |
      | 2021-11-20 | 2021-12-20       | 2021-11-20 00:10:00 | 2022-01-20           | 2021-10-11 00:00:00.123456789 | 2022-01-11            | 2021-11-29 | 2022-03-29       |
      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+

CURRENT_TIMESTAMP

  • 命令格式

    TIMESTAMP CURRENT_TIMESTAMP()
  • 命令說明

    返回當前TIMESTAMP類型的時間戳記,值不固定。此函數為MaxCompute 2.0擴充函數。

  • 傳回值說明

    返回TIMESTAMP類型。

  • 樣本

    --返回'2017-08-03 11:50:30.661'。
    SET odps.sql.type.system.odps2=true;
    SELECT CURRENT_TIMESTAMP(); 

CURRENT_TIMEZONE

  • 命令格式

    STRING CURRENT_TIMEZONE()
  • 命令說明

    返回當前系統的時區資訊。

  • 傳回值說明

    返回STRING類型。

  • 樣本

    --返回Asia/Shanghai。
    SELECT CURRENT_TIMEZONE();

DATE_ADD

  • 命令格式

    DATE DATE_ADD(DATE|TIMESTAMP|STRING <startdate>, BIGINT <delta>)
  • 命令說明

    按照delta幅度增減startdate日期的天數。

    說明
    • 若您需要擷取在目前時間基礎上指定變動幅度的日期,請參見GETDATE函數。

    • 若您需要精確到時、分或秒更細的幅度增減,請參見DATEADD函數。該函數目前只支援對年、月、日、時、分、秒其中單獨一個進行增減。若要同時對多個粒度幅度增減,建議您使用自訂函數處理。

    • 本命令與DATE_SUB的增減邏輯相反。

  • 參數說明

    參數

    是否必填

    說明

    startdate

    起始日期值。支援DATE、DATETIME或STRING類型。

    如果參數為STRING類型,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為DATE類型後參與運算,且STRING參數格式至少要包含'yyyy-mm-dd'。例如'2019-12-27'

    delta

    修改幅度。BIGINT類型。如果delta大於0,則delta小於0,則delta等於0,不增不減。

  • 傳回值說明

    返回DATE類型,格式為yyyy-mm-dd。返回規則如下:

    • startdate非DATE、DATETIME或STRING類型時,返回報錯。

    • startdate值為NULL時,返回報錯。

    • delta值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回2005-03-01。加1天,結果超出當年2月份的最後1天,實際值為下個月的第1天。
      SELECT DATE_ADD(DATETIME '2005-02-28 00:00:00', 1);
      
      --返回2005-02-27。減1天。
      SELECT DATE_ADD(DATE '2005-02-28', -1);
      
      --返回2005-03-20。
      SET odps.sql.type.system.odps2=false; 
      SELECT DATE_ADD('2005-02-28 00:00:00', 20);
      
      --假設目前時間為2020-11-17 16:31:44,返回2020-11-16。
      SELECT DATE_ADD(getdate(),-1);
      
      --返回NULL。
      SELECT DATE_ADD('2005-02-28 00:00:00', null);
    • 表資料樣本

      基於樣本資料,對date1、datetime1和timestamp1列按照幅度變化天數,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DATE_ADD(date1, 1) AS date1_date_add, 
             datetime1, 
             DATE_ADD(datetime1, -1) AS datetime1_date_add, 
             timestamp1, 
             DATE_ADD(timestamp1, 0) AS timestamp1_date_add 
      FROM mf_date_fun_t;

      返回結果如下。

      +------------+----------------+---------------------+-------------------+-------------------------------+--------------------+
      | date1      | date1_date_add | datetime1           | datetime1_date_add| timestamp1                    | timestamp1_date_add|
      +------------+----------------+---------------------+-------------------+-------------------------------+--------------------+
      | 2021-11-29 | 2021-11-30     | 2021-11-29 00:01:00 | 2021-11-28        | 2021-01-11 00:00:00.123456789 | 2021-01-11         |
      | 2021-11-28 | 2021-11-29     | 2021-11-28 00:02:00 | 2021-11-27        | 2021-02-11 00:00:00.123456789 | 2021-02-11         |
      | 2021-11-27 | 2021-11-28     | 2021-11-27 00:03:00 | 2021-11-26        | 2021-03-11 00:00:00.123456789 | 2021-03-11         |
      | 2021-11-26 | 2021-11-27     | 2021-11-26 00:04:00 | 2021-11-25        | 2021-04-11 00:00:00.123456789 | 2021-04-11         |
      | 2021-11-25 | 2021-11-26     | 2021-11-25 00:05:00 | 2021-11-24        | 2021-05-11 00:00:00.123456789 | 2021-05-11         |
      | 2021-11-24 | 2021-11-25     | 2021-11-24 00:06:00 | 2021-11-23        | 2021-06-11 00:00:00.123456789 | 2021-06-11         |
      | 2021-11-23 | 2021-11-24     | 2021-11-23 00:07:00 | 2021-11-22        | 2021-07-11 00:00:00.123456789 | 2021-07-11         |
      | 2021-11-22 | 2021-11-23     | 2021-11-22 00:08:00 | 2021-11-21        | 2021-08-11 00:00:00.123456789 | 2021-08-11         |
      | 2021-11-21 | 2021-11-22     | 2021-11-21 00:09:00 | 2021-11-20        | 2021-09-11 00:00:00.123456789 | 2021-09-11         |
      | 2021-11-20 | 2021-11-21     | 2021-11-20 00:10:00 | 2021-11-19        | 2021-10-11 00:00:00.123456789 | 2021-10-11         |
      +------------+----------------+---------------------+-------------------+-------------------------------+--------------------+

DATEADD

  • 命令格式

    DATE|DATETIME DATEADD(DATE|DATETIME|TIMESTAMP <date>, BIGINT <delta>, STRING <datepart>)
  • 命令說明

    按照指定的單位datepart和幅度delta修改date的值。如果您需要擷取在目前時間基礎上指定變動幅度的日期,請結合GETDATE函數使用。

  • 參數說明

    參數

    是否必填

    說明

    date

    日期值,類型為DATE、DATETIME或TIMESTAMP。 如果參數為STRING類型,格式符合DATETIME類型的格式,即yyyy-mm-dd hh:mi:ss,例如2021-08-28 00:00:00,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為DATETIME類型後參與運算。

    delta

    修改幅度,為BIGINT類型。如果delta大於0,則增,否則減。 如果參數為STRING或DOUBLE類型,則會隱式轉換為BIGINT類型後參與運算。

    說明
    • 按照指定的單位增減delta時,會導致更高單位的進位或退位。年、月、時、分、秒分別按照10進位、12進位、24進位、60進位進行計算。

    • delta的單位是月時,如果delta的月部分在增加delta值之後不造成Day溢出,則保持Day值不變,否則將Day值設定為結果月份的最後1天。

    datepart

    指定修改的單位,STRING類型常量。非常量、不支援的格式或其他類型會返回報錯。

    此欄位的取值遵循STRING與DATETIME類型轉換的約定,即yyyy表示年,mm表示月,dd表示天。關於類型轉換的規則,詳情請參見資料類型轉換。該欄位也支援擴充的日期格式:年-year、月-month-mon、日-day和小時-hour

  • 傳回值說明

    返回DATE或DATETIME類型,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ss。返回規則如下:

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

    • date值為NULL時,返回報錯。

    • deltadatepart值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      • 樣本1:常見用法。

        --返回2005-03-01 00:00:00。加1天,結果超出當年2月份的最後一天,實際值為下個月的第1天。
        SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'dd');
        
        --返回2005-02-27 00:00:00。減1天。
        SELECT DATEADD(DATETIME '2005-02-28 00:00:00', -1, 'dd');
        
        --返回2006-10-28 00:00:00。加20個月,月份溢出,年份加1。
        SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 20, 'mm');
        
        --返回2005-03-28 00:00:00。
        SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'mm');
        
        --返回2005-02-28 00:00:00。2005年2月沒有29日,日期截取至當月最後1天。
        SELECT DATEADD(DATETIME '2005-01-29 00:00:00', 1, 'mm');
        
        --返回2005-02-28 00:00:00。
        SELECT DATEADD(DATETIME '2005-03-30 00:00:00', -1, 'mm');
        
        --返回2005-03-18。
        SELECT DATEADD(DATE '2005-02-18', 1, 'mm');
        
        --開啟2.0新類型。此命令需要與SQL語句一起提交。返回2005-03-18 00:00:00.0。
        SET odps.sql.type.system.odps2=true;
        SELECT DATEADD(TIMESTAMP '2005-02-18 00:00:00', 1, 'mm');
        
        --假設目前時間為2020-11-17 16:31:44,返回2020-11-16 16:31:44。
        SELECT DATEADD(GETDATE(),-1,'dd');
        
        --返回NULL。
        SELECT DATEADD(DATE '2005-02-18', 1, null);
        
        -- 返回2005-03-30 02:24:00。減去3小時 
        SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -3, 'hh');
        
        -- 返回2005-03-30 04:54:00。減去30分鐘 
        SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'mi');
        
        -- 返回2005-03-30 05:23:30。減去30秒 
        SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'ss');
      • 樣本2:用常量表示。

        在MaxCompute SQL中,DATETIME類型沒有直接的常量表示方式,錯誤命令樣本如下:

        SELECT DATEADD(2005-03-30 00:00:00, -1, 'mm');

        如果需要描述DATETIME類型的常量,正確命令樣本如下:

        --將STRING類型常量顯式轉換為DATETIME類型,返回2005-02-28 00:00:00。
        SELECT DATEADD(CAST("2005-03-30 00:00:00" AS datetime), -1, 'mm');
      • 樣本3:輸入參數為STRING類型。

        --如下輸入參數為STRING類型,但不符合DATETIME類型格式,會返回報錯。
        SELECT DATEADD('2021-08-27',1,'dd');
        
        --如下輸入參數為STRING類型,符合DATETIME類型格式,且MaxCompute專案的資料類型版本為1.0,返回2005-03-01 00:00:00。
        SET odps.sql.type.system.odps2=false;
        SELECT DATEADD('2005-02-28 00:00:00', 1, 'dd');
    • 表資料樣本

      基於樣本資料,對date1、datetime1和timestamp1列按照指定單位和幅度變化,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DATEADD(date1,1,'dd') AS date1_dateadd, 
             datetime1, 
             DATEADD(datetime1,1,'mm') AS datetime1_dateadd, 
             timestamp1, 
             DATEADD(timestamp1,-1,'yyyy') AS timestamp1_dateadd 
      FROM mf_date_fun_t;

      返回結果如下。

      +------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+
      | date1      | date1_dateadd | datetime1           | datetime1_dateadd   | timestamp1                    | timestamp1_dateadd            |
      +------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+
      | 2021-11-29 | 2021-11-30    | 2021-11-29 00:01:00 | 2021-12-29 00:01:00 | 2021-01-11 00:00:00.123456789 | 2020-01-11 00:00:00.123456789 |
      | 2021-11-28 | 2021-11-29    | 2021-11-28 00:02:00 | 2021-12-28 00:02:00 | 2021-02-11 00:00:00.123456789 | 2020-02-11 00:00:00.123456789 |
      | 2021-11-27 | 2021-11-28    | 2021-11-27 00:03:00 | 2021-12-27 00:03:00 | 2021-03-11 00:00:00.123456789 | 2020-03-11 00:00:00.123456789 |
      | 2021-11-26 | 2021-11-27    | 2021-11-26 00:04:00 | 2021-12-26 00:04:00 | 2021-04-11 00:00:00.123456789 | 2020-04-11 00:00:00.123456789 |
      | 2021-11-25 | 2021-11-26    | 2021-11-25 00:05:00 | 2021-12-25 00:05:00 | 2021-05-11 00:00:00.123456789 | 2020-05-11 00:00:00.123456789 |
      | 2021-11-24 | 2021-11-25    | 2021-11-24 00:06:00 | 2021-12-24 00:06:00 | 2021-06-11 00:00:00.123456789 | 2020-06-11 00:00:00.123456789 |
      | 2021-11-23 | 2021-11-24    | 2021-11-23 00:07:00 | 2021-12-23 00:07:00 | 2021-07-11 00:00:00.123456789 | 2020-07-11 00:00:00.123456789 |
      | 2021-11-22 | 2021-11-23    | 2021-11-22 00:08:00 | 2021-12-22 00:08:00 | 2021-08-11 00:00:00.123456789 | 2020-08-11 00:00:00.123456789 |
      | 2021-11-21 | 2021-11-22    | 2021-11-21 00:09:00 | 2021-12-21 00:09:00 | 2021-09-11 00:00:00.123456789 | 2020-09-11 00:00:00.123456789 |
      | 2021-11-20 | 2021-11-21    | 2021-11-20 00:10:00 | 2021-12-20 00:10:00 | 2021-10-11 00:00:00.123456789 | 2020-10-11 00:00:00.123456789 |
      +------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+

DATE_FORMAT

  • 命令格式

    STRING DATE_FORMAT(DATE|TIMESTAMP|STRING <date>, STRING <format>)
  • 命令說明

    date按照format指定的格式轉換為字串。

  • 參數說明

    參數

    是否必填

    說明

    date

    待轉換的日期值。支援DATE、TIMESTAMP或STRING類型。

    • DATE和STRING類型只能在Hive相容模式下使用,您可以執行set odps.sql.hive.compatible=true;命令開啟Hive模式。

    • 如果參數為STRING類型,則格式只支援以下三種日期欄位:

      • 'yyyy-MM-dd',例如'2019-12-27'

      • 'yyyy-MM-dd hh:mm:ss',例如'2019-12-27 12:23:10'

      • 'yyyy-MM-dd hh:mm:ss.SSS',例如'2019-12-27 12:23:10.123'

    format

    STRING類型常量。format可由如下日期欄位組成,例如yyyy-MM-dd hh:mm:ss:SSSyyyy-MM-dd hh:mi:ss:SSS

    • YYYYyyyy代表年份,其中yyyy代表日曆年度,YYYY代表周年。

      說明

      周年格式可能會與實際年份不一致,請謹慎使用。

    • MM代表月份。

    • mm代表分鐘。

    • dd代表天。

    • HH代表24小時制時。

    • hh代表12小時制時。

    • mi代表分鐘。

    • ss代表秒。

    • SSS代表毫秒。

    重要
    • 在非Hive相容模式下,HHhh都代表24小時制時。並且只能使用yyyy-MM-dd hh:mi:ss,如果使用yyyy-MM-dd hh:mm:ssmm部分會取月份值。

    • 在Hive相容模式下,HH代表24小時制時,hh代表12小時制時。並且只能使用yyyy-MM-dd hh:mm:ss,如果使用yyyy-MM-dd hh:mi:ss會返回NULL。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • date非DATE或TIMESTAMP類型時,返回NULL。

    • date值為NULL時,返回報錯。

    • format值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --開啟Hive模式。與SQL語句一起提交。
      SET odps.sql.hive.compatible=true;
      
      --假設目前時間為2022-04-24 15:49。返回2022-04-24 03:49:01.902。
      SELECT DATE_FORMAT(FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC'),'yyyy-MM-dd hh:mm:ss.SSS');
      
      --返回2022-04-24。
      SELECT DATE_FORMAT('2022-04-24','yyyy-MM-dd');
    • 表資料樣本

      基於樣本資料,對datetime1和timestamp1轉換為指定格式的字串,命令樣本如下。

      --開啟Hive模式並開啟2.0新類型。與SQL語句一起提交。
      SET odps.sql.hive.compatible=true;
      SET odps.sql.type.system.odps2=true;
      SELECT datetime1, timestamp1, DATE_FORMAT(datetime1,'yyyy/MM/dd'),
             DATE_FORMAT(datetime1,'yyyy/MM/dd HH:mm:ss'),
             DATE_FORMAT(timestamp1,'yyyy/MM/dd HH:mm:ss')
      FROM mf_date_fun_t;

      返回結果如下。

      +------------+------------+-----+-----+-----+
      | datetime1  | timestamp1 | _c2 | _c3 | _c4 |
      +------------+------------+-----+-----+-----+
      | 2021-11-29 00:01:00 | 2021-01-11 00:00:00.123456789 | 2021/11/29 | 2021/11/29 00:01:00 | 2021/01/11 00:00:00 |
      | 2021-11-28 00:02:00 | 2021-02-11 00:00:00.123456789 | 2021/11/28 | 2021/11/28 00:02:00 | 2021/02/11 00:00:00 |
      | 2021-11-27 00:03:00 | 2021-03-11 00:00:00.123456789 | 2021/11/27 | 2021/11/27 00:03:00 | 2021/03/11 00:00:00 |
      | 2021-11-26 00:04:00 | 2021-04-11 00:00:00.123456789 | 2021/11/26 | 2021/11/26 00:04:00 | 2021/04/11 00:00:00 |
      | 2021-11-25 00:05:00 | 2021-05-11 00:00:00.123456789 | 2021/11/25 | 2021/11/25 00:05:00 | 2021/05/11 00:00:00 |
      | 2021-11-24 00:06:00 | 2021-06-11 00:00:00.123456789 | 2021/11/24 | 2021/11/24 00:06:00 | 2021/06/11 00:00:00 |
      | 2021-11-23 00:07:00 | 2021-07-11 00:00:00.123456789 | 2021/11/23 | 2021/11/23 00:07:00 | 2021/07/11 00:00:00 |
      | 2021-11-22 00:08:00 | 2021-08-11 00:00:00.123456789 | 2021/11/22 | 2021/11/22 00:08:00 | 2021/08/11 00:00:00 |
      | 2021-11-21 00:09:00 | 2021-09-11 00:00:00.123456789 | 2021/11/21 | 2021/11/21 00:09:00 | 2021/09/11 00:00:00 |
      | 2021-11-20 00:10:00 | 2021-10-11 00:00:00.123456789 | 2021/11/20 | 2021/11/20 00:10:00 | 2021/10/11 00:00:00 |
      +------------+------------+-----+-----+-----+

DATE_SUB

  • 命令格式

    DATE DATE_SUB(DATE|TIMESTAMP|STRING <startdate>, BIGINT <delta>)
  • 命令說明

    按照delta幅度增減startdate日期的天數。

    說明
    • 若您需要擷取在目前時間基礎上指定變動幅度的日期,請參見GETDATE函數。

    • 若您需要精確到時、分或秒更細的幅度增減,請參見DATEADD函數。該函數目前只支援對年、月、日、時、分、秒其中單獨一個進行增減。若要同時對多個粒度增減,建議您使用自訂函數處理。

    • 本命令與DATE_ADD的增減邏輯相反。

  • 參數說明

    參數

    是否必填

    說明

    startdate

    起始日期值。支援DATE、DATETIME或STRING類型。 如果參數為STRING類型,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為DATE類型後參與運算,且STRING參數格式至少要包含'yyyy-mm-dd'。例如'2019-12-27'

    delta

    修改幅度。BIGINT類型。如果delta大於0,則delta小於0,則delta等於0,不增不減。

  • 傳回值說明

    返回DATE類型,格式為yyyy-mm-dd。返回規則如下:

    • startdate非DATE、DATETIME或STRING類型時,返回報錯。

    • startdate值為NULL時,返回報錯。

    • delta值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      
      --返回2005-02-28。減1天,實際值為上個月的最後1天。
      SELECT DATE_SUB(datetime '2005-03-01 00:00:00', 1);
      
      --返回2005-03-01。增1天。
      SELECT DATE_SUB(date '2005-02-28', -1);
      
      --返回2005-02-27。減2天。
      SET odps.sql.type.system.odps2=false; 
      SELECT DATE_SUB('2005-03-01 00:00:00', 2);
      
      --假設目前時間為2021-09-10 16:31:44,返回2021-09-09。
      SELECT DATE_SUB(GETDATE(),1);
      
      --返回NULL。
      SELECT DATE_SUB('2005-03-01 00:00:00', null);
    • 表資料樣本

      基於樣本資料,對date1、datetime1和timestamp1列按照幅度變化天數,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DATE_SUB(date1,1) AS date1_date_sub, 
             datetime1, 
             DATE_SUB(datetime1,-1) AS datetime1_date_sub, 
             timestamp1, 
             DATE_SUB(timestamp1,0) AS timestamp1_date_sub 
      FROM mf_date_fun_t;

      返回結果如下。

      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+
      | date1      | date1_date_sub | datetime1           | datetime1_date_sub | timestamp1                    | timestamp1_date_sub |
      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+
      | 2021-11-29 | 2021-11-28     | 2021-11-29 00:01:00 | 2021-11-30         | 2021-01-11 00:00:00.123456789 | 2021-01-11          |
      | 2021-11-28 | 2021-11-27     | 2021-11-28 00:02:00 | 2021-11-29         | 2021-02-11 00:00:00.123456789 | 2021-02-11          |
      | 2021-11-27 | 2021-11-26     | 2021-11-27 00:03:00 | 2021-11-28         | 2021-03-11 00:00:00.123456789 | 2021-03-11          |
      | 2021-11-26 | 2021-11-25     | 2021-11-26 00:04:00 | 2021-11-27         | 2021-04-11 00:00:00.123456789 | 2021-04-11          |
      | 2021-11-25 | 2021-11-24     | 2021-11-25 00:05:00 | 2021-11-26         | 2021-05-11 00:00:00.123456789 | 2021-05-11          |
      | 2021-11-24 | 2021-11-23     | 2021-11-24 00:06:00 | 2021-11-25         | 2021-06-11 00:00:00.123456789 | 2021-06-11          |
      | 2021-11-23 | 2021-11-22     | 2021-11-23 00:07:00 | 2021-11-24         | 2021-07-11 00:00:00.123456789 | 2021-07-11          |
      | 2021-11-22 | 2021-11-21     | 2021-11-22 00:08:00 | 2021-11-23         | 2021-08-11 00:00:00.123456789 | 2021-08-11          |
      | 2021-11-21 | 2021-11-20     | 2021-11-21 00:09:00 | 2021-11-22         | 2021-09-11 00:00:00.123456789 | 2021-09-11          |
      | 2021-11-20 | 2021-11-19     | 2021-11-20 00:10:00 | 2021-11-21         | 2021-10-11 00:00:00.123456789 | 2021-10-11          |
      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+

DATEDIFF

  • 命令格式

    BIGINT DATEDIFF(DATE|DATETIME|TIMESTAMP <date1>, DATE|DATETIME|TIMESTAMP <date2>, STRING <datepart>)
  • 命令說明

    計算兩個時間date1date2的差值,將差值以指定的時間單位datepart表示。

  • 參數說明

    參數

    是否必填

    說明

    date1、date2

    DATE、DATETIME或TIMESTAMP類型。被減數和減數。如果輸入為STRING類型,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為DATETIME類型後參與運算。

    說明

    MaxCompute資料類型版本2.0才支援TIMESTAMP類型。關於2.0資料類型版本詳情,請參見2.0資料類型版本

    datepart

    時間單位,STRING類型常量。

    如果您開啟了MaxCompute新資料類型開關,可以不填寫datepart參數,預設日期格式為天。該欄位也支援擴充的日期格式:年-year、月-month-mon、日-day和小時-hour

    說明

    系統計算時會按照datepart切掉低單位部分,然後再計算結果。

  • 傳回值說明

    返回BIGINT類型。返回規則如下:

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

    • date1小於date2,傳回值為負數。

    • date1date2值為NULL時,返回NULL。

    • datepart值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      • 樣本1

        SET odps.sql.type.system.odps2=true;
        SELECT DATEDIFF(TIMESTAMP '2006-01-01 00:00:00', TIMESTAMP '2005-12-31 23:59:59', 'dd'); 

        返回結果如下。

        +------------+
        | _c0        |
        +------------+
        | 1          |
        +------------+
      • 樣本2

        SET odps.sql.type.system.odps2=true;
        SELECT DATEDIFF(TIMESTAMP '2006-01-01 00:00:00', TIMESTAMP '2005-12-31 23:59:59', 'mm'); 

        返回結果如下。

        +------------+
        | _c0        |
        +------------+
        | 1          |
        +------------+
      • 樣本3

        SELECT  DATEDIFF(DATETIME '2013-05-31 13:00:00', DATETIME '2013-05-31 12:30:00','ss');

        返回結果如下。

        +------------+
        | _c0        |
        +------------+
        | 1800       |
        +------------+
      • 樣本4

        SET odps.sql.type.system.odps2 = false;
        SELECT DATEDIFF('2013-05-31 13:00:00','2013-05-31 12:30:00','mi');

        返回結果如下。

        +------------+
        | _c0        |
        +------------+
        | 30         |
        +------------+
      • 樣本5

        --含毫秒的日期不屬於標準DATETIME式樣,不能直接隱式轉換,此處需進行顯示轉換
        SELECT  DATEDIFF(
          TO_DATE('2018-06-04 19:33:23.250','yyyy-mm-dd hh:mi:ss.ff3'),
          TO_DATE('2018-06-04 19:33:23.234','yyyy-mm-dd hh:mi:ss.ff3'),
          'ff3');

        返回結果如下。

        +------------+
        | _c0        |
        +------------+
        | 16         |
        +------------+

      • 樣本6

        SET odps.sql.type.system.odps2=true;
        SELECT  DATEDIFF(DATE '2013-05-21',DATE '2013-05-10',NULL);

        返回結果如下。

        +------------+
        | _c0        |
        +------------+
        | NULL       |
        +------------+
    • 表資料樣本

      基於樣本資料,計算date1和date2、datetime1和datetime2、timestamp1和timestamp2列的差值,並以指定單位表示,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2 = true;
      
      SELECT  date1, 
              date2, 
              DATEDIFF(date1,date2,'dd') AS date1_date2_datediff, 
              datetime1, 
              datetime2, 
              DATEDIFF(datetime1,datetime2,'dd') AS datetime1_datetime2_datediff, 
              timestamp1, 
              timestamp2, 
              DATEDIFF(timestamp1,timestamp2,'mm') AS timestamp1_timestamp2_datediff
      FROM    mf_date_fun_t;

      返回結果如下。

      +------------+------------+----------------------+---------------------+---------------------+------------------------------+-------------------------------+-------------------------------+--------------------------------+
      | date1      | date2      | date1_date2_datediff | datetime1           | datetime2           | datetime1_datetime2_datediff | timestamp1                    | timestamp2                    | timestamp1_timestamp2_datediff |
      +------------+------------+----------------------+---------------------+---------------------+------------------------------+-------------------------------+-------------------------------+--------------------------------+
      | 2021-11-29 | 2021-10-29 | 31                   | 2021-11-29 00:01:00 | 2021-10-29 00:00:00 | 31                           | 2021-01-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -9                             |
      | 2021-11-28 | 2021-10-29 | 30                   | 2021-11-28 00:02:00 | 2021-10-29 00:00:00 | 30                           | 2021-02-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -8                             |
      | 2021-11-27 | 2021-10-29 | 29                   | 2021-11-27 00:03:00 | 2021-10-29 00:00:00 | 29                           | 2021-03-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -7                             |
      | 2021-11-26 | 2021-10-29 | 28                   | 2021-11-26 00:04:00 | 2021-10-29 00:00:00 | 28                           | 2021-04-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -6                             |
      | 2021-11-25 | 2021-10-29 | 27                   | 2021-11-25 00:05:00 | 2021-10-29 00:00:00 | 27                           | 2021-05-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -5                             |
      | 2021-11-24 | 2021-10-29 | 26                   | 2021-11-24 00:06:00 | 2021-10-29 00:00:00 | 26                           | 2021-06-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -4                             |
      | 2021-11-23 | 2021-10-29 | 25                   | 2021-11-23 00:07:00 | 2021-10-29 00:00:00 | 25                           | 2021-07-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -3                             |
      | 2021-11-22 | 2021-10-29 | 24                   | 2021-11-22 00:08:00 | 2021-10-29 00:00:00 | 24                           | 2021-08-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -2                             |
      | 2021-11-21 | 2021-10-29 | 23                   | 2021-11-21 00:09:00 | 2021-10-29 00:00:00 | 23                           | 2021-09-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -1                             |
      | 2021-11-20 | 2021-10-29 | 22                   | 2021-11-20 00:10:00 | 2021-10-29 00:00:00 | 22                           | 2021-10-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | 0                              |
      +------------+------------+----------------------+---------------------+---------------------+------------------------------+-------------------------------+-------------------------------+--------------------------------+

DATEPART

  • 命令格式

    BIGINT DATEPART(DATE|DATETIME|TIMESTAMP <date>, STRING <datepart>)
  • 命令說明

    提取日期date中符合指定時間單位datepart的值。

  • 參數說明

    參數

    是否必填

    說明

    date

    DATE、DATETIME或TIMESTAMP類型。如果輸入為STRING類型,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為DATETIME類型後參與運算。

    datepart

    STRING類型常量,支援擴充的日期格式。

    此欄位的取值遵循STRING與DATETIME類型轉換的約定,即yyyy表示年,mm表示月,dd表示天。關於類型轉換的規則,詳情請參見資料類型轉換。該欄位也支援擴充的日期格式:年-year、月-month-mon、日-day和小時-hour

  • 傳回值說明

    返回BIGINT類型。返回規則如下:

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

    • date值為NULL時,返回報錯。

    • datepart值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回2013。
      SELECT DATEPART(DATETIME '2013-06-08 01:10:00', 'yyyy'); 
      
      --返回6。
      SELECT DATEPART(DATETIME '2013-06-08 01:10:00', 'mm');
      
      --返回2013。
      SELECT DATEPART(DATE '2013-06-08', 'yyyy');
      
      --開啟2.0新類型。此命令需要與SQL語句一起提交。返回2013。
      SET odps.sql.type.system.odps2=true;
      SELECT DATEPART(TIMESTAMP '2013-06-08 01:10:00', 'yyyy');
      
      --返回2013。
      SET odps.sql.type.system.odps2=false;
      SELECT DATEPART('2013-06-08 01:10:00', 'yyyy');
      
      --返回NULL。
      SELECT DATEPART(DATE '2013-06-08', null);
    • 表資料樣本

      基於樣本資料,提取date1、datetime1和timestamp1中符合指定時間單位的值,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DATEPART(date1,'yyyy') AS date1_datepart, datetime1, 
             DATEPART(datetime1,'dd') AS datetime1_datepart, 
             timestamp1, 
             datepart(timestamp1,'mm') AS timestamp1_datepart 
        FROM mf_date_fun_t;

      返回結果如下。

      +------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+
      | date1      | date1_datepart | datetime1           | datetime1_datepart      | timestamp1                    | timestamp1_datepart |
      +------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+
      | 2021-11-29 | 2021           | 2021-11-29 00:01:00 | 29                      | 2021-01-11 00:00:00.123456789 | 1                   |
      | 2021-11-28 | 2021           | 2021-11-28 00:02:00 | 28                      | 2021-02-11 00:00:00.123456789 | 2                   |
      | 2021-11-27 | 2021           | 2021-11-27 00:03:00 | 27                      | 2021-03-11 00:00:00.123456789 | 3                   |
      | 2021-11-26 | 2021           | 2021-11-26 00:04:00 | 26                      | 2021-04-11 00:00:00.123456789 | 4                   |
      | 2021-11-25 | 2021           | 2021-11-25 00:05:00 | 25                      | 2021-05-11 00:00:00.123456789 | 5                   |
      | 2021-11-24 | 2021           | 2021-11-24 00:06:00 | 24                      | 2021-06-11 00:00:00.123456789 | 6                   |
      | 2021-11-23 | 2021           | 2021-11-23 00:07:00 | 23                      | 2021-07-11 00:00:00.123456789 | 7                   |
      | 2021-11-22 | 2021           | 2021-11-22 00:08:00 | 22                      | 2021-08-11 00:00:00.123456789 | 8                   |
      | 2021-11-21 | 2021           | 2021-11-21 00:09:00 | 21                      | 2021-09-11 00:00:00.123456789 | 9                   |
      | 2021-11-20 | 2021           | 2021-11-20 00:10:00 | 20                      | 2021-10-11 00:00:00.123456789 | 10                  |
      +------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+

DATETRUNC

  • 命令格式

    DATE|DATETIME DATETRUNC(DATE|DATETIME|TIMESTAMP <date>, STRING <datepart>)
  • 命令說明

    返回將日期date按照datepart指定的時間單位進行截取後的日期值。

  • 參數說明

    參數

    是否必填

    說明

    date

    DATE、DATETIME或TIMESTAMP類型。如果輸入為STRING類型,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為DATETIME類型後參與運算。

    datepart

    STRING類型常量。支援擴充的日期格式。

    此欄位的取值遵循STRING與DATETIME類型轉換的約定,即yyyy表示年,mm表示月,dd表示天。關於類型轉換的規則,詳情請參見資料類型轉換。該欄位也支援擴充的日期格式:年-year、月-month-mon、日-day和小時-hour

  • 傳回值說明

    返回DATE或DATETIME類型,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ss。返回規則如下:

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

    • date值為NULL時,返回報錯。

    • datepart值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回2011-01-01 00:00:00。
      SELECT DATETRUNC(DATETIME '2011-12-07 16:28:46', 'yyyy');
      
      --返回2011-12-01 00:00:00。
      SELECT DATETRUNC(DATETIME'2011-12-07 16:28:46', 'month');
      
      --返回2011-12-07 00:00:00。
      SELECT DATETRUNC(DATETIME'2011-12-07 16:28:46', 'DD');
      
      --返回2011-01-01。
      SELECT DATETRUNC(DATE '2011-12-07', 'yyyy');
      
      --開啟2.0新類型。此命令需要與SQL語句一起提交。返回2011-01-01 00:00:00.0。
      SET odps.sql.type.system.odps2=true;
      SELECT DATETRUNC(TIMESTAMP '2011-12-07 16:28:46', 'yyyy');
      
      --返回2011-01-01 00:00:00.0。
      SET odps.sql.type.system.odps2=false;
      SELECT DATETRUNC('2011-12-07 16:28:46', 'yyyy');
      
      --返回NULL。
      SELECT DATETRUNC(DATE '2011-12-07', null);
    • 表資料樣本

      基於樣本資料,返回date1、datetime1和timestamp1按照指定時間單位截取後的值,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DATETRUNC(date1,'yyyy') AS date1_datetrunc, 
             datetime1, 
             DATETRUNC(datetime1,'dd') AS datetime1_datetrunc, 
             timestamp1, 
             DATETRUNC(timestamp1,'mm') AS timestamp1_datetrunc 
        FROM mf_date_fun_t;

      返回結果如下。

      +------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+
      | date1      | date1_datetrunc | datetime1           | datetime1_datetrunc | timestamp1                    | timestamp1_datetrunc |
      +------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+
      | 2021-11-29 | 2021-01-01      | 2021-11-29 00:01:00 | 2021-11-29 00:00:00 | 2021-01-11 00:00:00.123456789 | 2021-01-01 00:00:00  |
      | 2021-11-28 | 2021-01-01      | 2021-11-28 00:02:00 | 2021-11-28 00:00:00 | 2021-02-11 00:00:00.123456789 | 2021-02-01 00:00:00  |
      | 2021-11-27 | 2021-01-01      | 2021-11-27 00:03:00 | 2021-11-27 00:00:00 | 2021-03-11 00:00:00.123456789 | 2021-03-01 00:00:00  |
      | 2021-11-26 | 2021-01-01      | 2021-11-26 00:04:00 | 2021-11-26 00:00:00 | 2021-04-11 00:00:00.123456789 | 2021-04-01 00:00:00  |
      | 2021-11-25 | 2021-01-01      | 2021-11-25 00:05:00 | 2021-11-25 00:00:00 | 2021-05-11 00:00:00.123456789 | 2021-05-01 00:00:00  |
      | 2021-11-24 | 2021-01-01      | 2021-11-24 00:06:00 | 2021-11-24 00:00:00 | 2021-06-11 00:00:00.123456789 | 2021-06-01 00:00:00  |
      | 2021-11-23 | 2021-01-01      | 2021-11-23 00:07:00 | 2021-11-23 00:00:00 | 2021-07-11 00:00:00.123456789 | 2021-07-01 00:00:00  |
      | 2021-11-22 | 2021-01-01      | 2021-11-22 00:08:00 | 2021-11-22 00:00:00 | 2021-08-11 00:00:00.123456789 | 2021-08-01 00:00:00  |
      | 2021-11-21 | 2021-01-01      | 2021-11-21 00:09:00 | 2021-11-21 00:00:00 | 2021-09-11 00:00:00.123456789 | 2021-09-01 00:00:00  |
      | 2021-11-20 | 2021-01-01      | 2021-11-20 00:10:00 | 2021-11-20 00:00:00 | 2021-10-11 00:00:00.123456789 | 2021-10-01 00:00:00  |
      +------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+

DAY

  • 命令格式

    INT DAY(DATETIME|TIMESTAMP|DATE|STRING <date>)
  • 命令說明

    返回一個日期的天。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATETIME、TIMESTAMP、DATE或STRING類型日期值,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

  • 傳回值說明

    返回INT類型。返回規則如下:

    • date非DATETIME、TIMESTAMP、DATE或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回1。
      SELECT DAY('2014-09-01');
      
      --返回NULL。
      SELECT DAY('20140901');
      
      --返回NULL。
      SELECT DAY(null);
    • 表資料樣本

      基於樣本資料,返回date1、datetime1、timestamp1和date3列日期對應的天,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DAY(date1) AS date1_day, 
             datetime1, 
             DAY(datetime1) AS datetime1_day, 
             timestamp1, 
             DAY(timestamp1) AS timestamp1_day, 
             date3, 
             DAY(date3) AS date3_day 
        FROM mf_date_fun_t;

      返回結果如下。

      +------------+-----------+---------------------+---------------+-------------------------------+----------------+------------+-----------+
      | date1      | date1_day | datetime1           | datetime1_day | timestamp1                    | timestamp1_day | date3      | date3_day |
      +------------+-----------+---------------------+---------------+-------------------------------+----------------+------------+-----------+
      | 2021-11-29 | 29        | 2021-11-29 00:01:00 | 29            | 2021-01-11 00:00:00.123456789 | 11             | 2021-11-20 | 20        |
      | 2021-11-28 | 28        | 2021-11-28 00:02:00 | 28            | 2021-02-11 00:00:00.123456789 | 11             | 2021-11-21 | 21        |
      | 2021-11-27 | 27        | 2021-11-27 00:03:00 | 27            | 2021-03-11 00:00:00.123456789 | 11             | 2021-11-22 | 22        |
      | 2021-11-26 | 26        | 2021-11-26 00:04:00 | 26            | 2021-04-11 00:00:00.123456789 | 11             | 2021-11-23 | 23        |
      | 2021-11-25 | 25        | 2021-11-25 00:05:00 | 25            | 2021-05-11 00:00:00.123456789 | 11             | 2021-11-24 | 24        |
      | 2021-11-24 | 24        | 2021-11-24 00:06:00 | 24            | 2021-06-11 00:00:00.123456789 | 11             | 2021-11-25 | 25        |
      | 2021-11-23 | 23        | 2021-11-23 00:07:00 | 23            | 2021-07-11 00:00:00.123456789 | 11             | 2021-11-26 | 26        |
      | 2021-11-22 | 22        | 2021-11-22 00:08:00 | 22            | 2021-08-11 00:00:00.123456789 | 11             | 2021-11-27 | 27        |
      | 2021-11-21 | 21        | 2021-11-21 00:09:00 | 21            | 2021-09-11 00:00:00.123456789 | 11             | 2021-11-28 | 28        |
      | 2021-11-20 | 20        | 2021-11-20 00:10:00 | 20            | 2021-10-11 00:00:00.123456789 | 11             | 2021-11-29 | 29        |
      +------------+-----------+---------------------+---------------+-------------------------------+----------------+------------+-----------+

DAYOFMONTH

  • 命令格式

    INT DAYOFMONTH(DATETIME|TIMESTAMP|DATE|STRING <date>)
  • 命令說明

    返回日期日部分的值。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATETIME、TIMESTAMP、DATE或STRING類型日期值,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

  • 傳回值說明

    返回INT類型。返回規則如下:

    • date非DATETIME、TIMESTAMP、DATE或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回1。
      SELECT DAYOFMONTH('2014-09-01');
      
      --返回NULL。
      SELECT DAYOFMONTH('20140901');
      
      --返回NULL。
      SELECT DAYOFMONTH(null);
    • 表資料樣本

      基於樣本資料,返回date1、datetime1、timestamp1和date3列日期日部分的值,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DAYOFMONTH(date1) AS date1_dayofmonth, 
             datetime1, 
             DAYOFMONTH(datetime1) AS datetime1_dayofmonth, 
             timestamp1, 
             DAYOFMONTH(timestamp1) AS timestamp1_dayofmonth, 
             date3, 
             DAYOFMONTH(date3) AS date3_dayofmonth 
        FROM mf_date_fun_t;

      返回結果如下。

      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
      | date1      | date1_dayofmonth | datetime1           | datetime1_dayofmonth | timestamp1                    | timestamp1_dayofmonth | date3      | date3_dayofmonth |
      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
      | 2021-11-29 | 29               | 2021-11-29 00:01:00 | 29                   | 2021-01-11 00:00:00.123456789 | 11                    | 2021-11-20 | 20               |
      | 2021-11-28 | 28               | 2021-11-28 00:02:00 | 28                   | 2021-02-11 00:00:00.123456789 | 11                    | 2021-11-21 | 21               |
      | 2021-11-27 | 27               | 2021-11-27 00:03:00 | 27                   | 2021-03-11 00:00:00.123456789 | 11                    | 2021-11-22 | 22               |
      | 2021-11-26 | 26               | 2021-11-26 00:04:00 | 26                   | 2021-04-11 00:00:00.123456789 | 11                    | 2021-11-23 | 23               |
      | 2021-11-25 | 25               | 2021-11-25 00:05:00 | 25                   | 2021-05-11 00:00:00.123456789 | 11                    | 2021-11-24 | 24               |
      | 2021-11-24 | 24               | 2021-11-24 00:06:00 | 24                   | 2021-06-11 00:00:00.123456789 | 11                    | 2021-11-25 | 25               |
      | 2021-11-23 | 23               | 2021-11-23 00:07:00 | 23                   | 2021-07-11 00:00:00.123456789 | 11                    | 2021-11-26 | 26               |
      | 2021-11-22 | 22               | 2021-11-22 00:08:00 | 22                   | 2021-08-11 00:00:00.123456789 | 11                    | 2021-11-27 | 27               |
      | 2021-11-21 | 21               | 2021-11-21 00:09:00 | 21                   | 2021-09-11 00:00:00.123456789 | 11                    | 2021-11-28 | 28               |
      | 2021-11-20 | 20               | 2021-11-20 00:10:00 | 20                   | 2021-10-11 00:00:00.123456789 | 11                    | 2021-11-29 | 29               |
      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+

DAYOFWEEK

  • 命令格式

    INT DAYOFWEEK(DATETIME|TIMESTAMP|DATE|STRING <date>)
  • 命令說明

    返回日期的星期值。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATETIME、TIMESTAMP、DATE或STRING類型日期值,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

  • 傳回值說明

    返回INT類型。返回規則如下:

    • date非DATETIME、TIMESTAMP、DATE或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

    • 傳回值的取值範圍為1~7,與星期的對應關係為1=Sunday, 2=Monday,...,7=Saturday。

  • 樣本

    --返回5,即Thursday。
    SELECT DAYOFWEEK('2009-07-30');

DAYOFYEAR

  • 命令格式

    INT DAYOFYEAR(DATETIME|TIMESTAMP|DATE|STRING <date>)
  • 命令說明

    返回日期是當年中的第幾天。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATETIME、TIMESTAMP、DATE或STRING類型日期值,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

  • 傳回值說明

    返回INT類型。返回規則如下:

    • date非DATETIME、TIMESTAMP、DATE或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    --返回100。
    SELECT DAYOFYEAR('2016-04-09');

EXTRACT

  • 命令格式

    INT EXTRACT(<datepart> FROM DATE|DATETIME|TIMESTAMP <date>)
  • 命令說明

    提取日期date中指定單位datepart的部分。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    參數

    是否必填

    說明

    datepart

    支援YEAR、MONTH、DAY、HOUR、MINUTE或SECOND時間取值。

    date

    DATE、DATETIME、TIMESTAMP或STRING類型日期值,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

  • 傳回值

    返回INT類型。返回規則如下:

    • datepart非YEAR、MONTH、DAY、HOUR、MINUTE或SECOND時間取值時,返回報錯。

    • datepart值為NULL時,返回報錯。

    • date非DATE、DATETIME、TIMESTAMP或STRING類型或為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT  EXTRACT(YEAR FROM '2019-05-01 11:21:00') YEAR, 
              EXTRACT(MONTH FROM '2019-05-01 11:21:00') MONTH, 
              EXTRACT(DAY FROM '2019-05-01 11:21:00') DAY, 
              EXTRACT(HOUR FROM '2019-05-01 11:21:00') HOUR, 
              EXTRACT(MINUTE FROM '2019-05-01 11:21:00') MINUTE;
              
      --傳回值如下。
      +------+-------+------+------+--------+
      | year | month | day  | hour | minute |
      +------+-------+------+------+--------+
      | 2019 | 5     | 1    | 11   | 21     |
      +------+-------+------+------+--------+
      
      --返回NULL。
      SELECT  EXTRACT(YEAR FROM null);
    • 表資料樣本

      基於樣本資料,提取timestamp1列的指定部分,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT timestamp1, 
             EXTRACT(YEAR FROM timestamp1) YEAR, 
             timestamp2, 
             EXTRACT(MONTH from timestamp2) MONTH 
        FROM mf_date_fun_t;

      返回結果如下。

      +-------------------------------+------+-------------------------------+-------+
      | timestamp1                    | year | timestamp2                    | month |
      +-------------------------------+------+-------------------------------+-------+
      | 2021-01-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-02-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-03-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-04-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-05-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-06-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-07-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-08-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-09-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-10-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      +-------------------------------+------+-------------------------------+-------+

FROM_UNIXTIME

  • 命令格式

    DATETIME FROM_UNIXTIME(BIGINT <unixtime>)
  • 命令說明

    將數字型的UNIX時間日期值unixtime轉為日期值。

  • 參數說明

    unixtime:必填。BIGINT類型,秒數,UNIX格式的日期時間值,取值範圍:[-62167305600, 253402387200]。

    說明

    如果輸入為STRING、DOUBLE或DECIMAL類型,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為BIGINT後參與運算。

  • 傳回值說明

    返回DATETIME類型,格式為yyyy-mm-dd hh:mi:ssunixtime值為NULL時,返回NULL。

    說明

    Hive相容模式下(set odps.sql.hive.compatible=true;):

    • 如果輸入參數是STRING類型,傳回值也是STRING類型。

    • 可以傳入第二個參數,來決定輸出的日期時間格式。如果設定格式為“yyyy-MM-dd” 或者“YYYY-MM-dd” ,其中yyyy代表年,YYYY代表周年,請謹慎使用周年方式,周年格式可能會與實際年份不一致。

  • 樣本

    • 待用資料樣本

      --返回1973-11-30 05:33:09。
      SELECT FROM_UNIXTIME(123456789);
      
      --返回1973-11-30 05:33:09。
      SET odps.sql.type.system.odps2=false;
      SELECT FROM_UNIXTIME('123456789');
      
      --返回NULL。
      SELECT FROM_UNIXTIME(null);
    • 表資料樣本

      基於樣本資料,將date4轉換為日期值,命令樣本如下。

      SELECT date4, FROM_UNIXTIME(date4) AS date4_from_unixtime FROM mf_date_fun_t;

      返回結果如下。

      +------------+---------------------+
      | date4      | date4_from_unixtime |
      +------------+---------------------+
      | 123456780  | 1973-11-30 05:33:00 |
      | 123456781  | 1973-11-30 05:33:01 |
      | 123456782  | 1973-11-30 05:33:02 |
      | 123456783  | 1973-11-30 05:33:03 |
      | 123456784  | 1973-11-30 05:33:04 |
      | 123456785  | 1973-11-30 05:33:05 |
      | 123456786  | 1973-11-30 05:33:06 |
      | 123456787  | 1973-11-30 05:33:07 |
      | 123456788  | 1973-11-30 05:33:08 |
      | 123456789  | 1973-11-30 05:33:09 |
      +------------+---------------------+

FROM_UTC_TIMESTAMP

  • 命令格式

    TIMESTAMP FROM_UTC_TIMESTAMP({any primitive type}*, STRING <timezone>)
  • 命令說明

    將一個UTC時區的時間戳記轉換成一個指定時區的時間戳記,即將一個UTC時區的時間戳記按照指定的時區顯示。此函數為MaxCompute 2.0擴充函數。

    重要

    FROM_UTC_TIMESTAMP函數還會受到Project層級flag(odps.sql.timezone)配置的影響。假如odps.sql.timezone=Asia/Shanghai即東八區時區,會比UTC時區多八個小時,所以會在FROM_UTC_TIMESTAMP函數轉換後的基礎上再加八個小時顯示。樣本: FROM_UTC_TIMESTAMP(0, 'Asia/Shanghai')的邏輯是把UTC-0時區的0,向北京時區位移,得到的是UTC-0時間為0 + 8 * 3600 = 28800。但由於Project配置了odps.sql.timezone=Asia/Shanghai,會導致繼續位移八小時,最終顯示為1970-01-01 16:00:00

  • 參數說明

    參數

    是否必填

    說明

    {any primitive type}*

    時間戳記,支援TIMESTAMP、DATETIME、TINYINT、SMALLINT、INT或BIGINT資料類型。如果該參數為TINYINT、SMALLINT、INT或BIGINT資料類型,則單位為毫秒。

    timezone

    指定需要轉換的目標時區。

    說明

    您可直接在搜尋引擎中尋找相關時區列表詳情。

  • 傳回值說明

    返回TIMESTAMP類型,格式為yyyy-mm-dd hh:mi:ss.ff3。返回規則如下:

    • {any primitive type}*非TIMESTAMP、DATETIME、TINYINT、SMALLINT、INT或BIGINT時,返回報錯。

    • {any primitive type}*值為NULL時,返回報錯。

    • timezone值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --輸入參數為毫秒(ms),返回2017-08-01 04:24:00.0。
      SELECT FROM_UTC_TIMESTAMP(1501557840000, 'PST'); 
      
      --返回1970-01-30 08:00:00.0。
      SELECT FROM_UTC_TIMESTAMP('1970-01-30 16:00:00','PST'); 
      
      --返回1970-01-29 16:00:00.0。
      SELECT FROM_UTC_TIMESTAMP('1970-01-30','PST'); 
      
      --開啟2.0新類型。此命令需要與SQL語句一起提交。返回2011-12-25 17:00:00.123。
      SET odps.sql.type.system.odps2=true;
      SELECT FROM_UTC_TIMESTAMP(timestamp '2011-12-25 09:00:00.123456', 'Asia/Shanghai');
      
      --開啟2.0新類型。此命令需要與SQL語句一起提交。返回2011-12-25 01:55:00.0。
      SET odps.sql.type.system.odps2=true;
      SELECT FROM_UTC_TIMESTAMP(timestamp '2011-12-25 06:55:00', 'America/Toronto');
      
      --返回NULL。
      SELECT FROM_UTC_TIMESTAMP('1970-01-30',null);
    • 表資料樣本

      基於樣本資料,將datetime1和timestamp1列轉換為指定時區的時間戳記,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT datetime1, 
             FROM_UTC_TIMESTAMP(datetime1,'PST') pst, 
             timestamp1, 
             FROM_UTC_TIMESTAMP(timestamp1,'Asia/Shanghai') asia 
        FROM mf_date_fun_t;

      返回結果如下。

      +---------------------+---------------------+-------------------------------+-------------------------------+
      | datetime1           | pst                 | timestamp1                    | asia                          |
      +---------------------+---------------------+-------------------------------+-------------------------------+
      | 2021-11-29 00:01:00 | 2021-11-28 16:01:00 | 2021-01-11 00:00:00.123456789 | 2021-01-11 08:00:00.123456789 |
      | 2021-11-28 00:02:00 | 2021-11-27 16:02:00 | 2021-02-11 00:00:00.123456789 | 2021-02-11 08:00:00.123456789 |
      | 2021-11-27 00:03:00 | 2021-11-26 16:03:00 | 2021-03-11 00:00:00.123456789 | 2021-03-11 08:00:00.123456789 |
      | 2021-11-26 00:04:00 | 2021-11-25 16:04:00 | 2021-04-11 00:00:00.123456789 | 2021-04-11 08:00:00.123456789 |
      | 2021-11-25 00:05:00 | 2021-11-24 16:05:00 | 2021-05-11 00:00:00.123456789 | 2021-05-11 08:00:00.123456789 |
      | 2021-11-24 00:06:00 | 2021-11-23 16:06:00 | 2021-06-11 00:00:00.123456789 | 2021-06-11 08:00:00.123456789 |
      | 2021-11-23 00:07:00 | 2021-11-22 16:07:00 | 2021-07-11 00:00:00.123456789 | 2021-07-11 08:00:00.123456789 |
      | 2021-11-22 00:08:00 | 2021-11-21 16:08:00 | 2021-08-11 00:00:00.123456789 | 2021-08-11 08:00:00.123456789 |
      | 2021-11-21 00:09:00 | 2021-11-20 16:09:00 | 2021-09-11 00:00:00.123456789 | 2021-09-11 08:00:00.123456789 |
      | 2021-11-20 00:10:00 | 2021-11-19 16:10:00 | 2021-10-11 00:00:00.123456789 | 2021-10-11 08:00:00.123456789 |
      +---------------------+---------------------+-------------------------------+-------------------------------+

GETDATE

  • 命令格式

    DATETIME GETDATE()
  • 命令說明

    擷取當前系統時間。使用東八區時間作為MaxCompute標準時間。

  • 傳回值說明

    返回當前日期和時間,類型為DATETIME。

    說明

    在MaxCompute SQL中,getdate總是返回一個固定的值。返回結果會是MaxCompute SQL執行期間的任意時間,時間精度精確到秒。如果開啟了新資料類型2.0,時間精度精確到毫秒。

HOUR

  • 命令格式

    INT HOUR(DATETIME|TIMESTAMP|STRING <date>)
  • 命令說明

    返回日期小時部分的值。

  • 參數說明

    date:必填。DATETIME、TIMESTAMP或STRING類型日期值,格式為yyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。此函數為MaxCompute 2.0擴充函數。

  • 傳回值說明

    返回INT類型。返回規則如下:

    • date非DATETIME、TIMESTAMP或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回12。
      SELECT HOUR('2014-09-01 12:00:00');
      
      --返回12。
      SELECT HOUR('12:00:00');
      
      --返回NULL。
      SELECT HOUR('20140901120000');
      
      --返回NULL。
      SELECT HOUR(null);
    • 表資料樣本

      基於樣本資料,返回datetime1和timestamp1小時部分的值,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT datetime1, 
             HOUR(datetime1) AS datetime1_hour, 
             timestamp1, 
             HOUR(timestamp1) AS timestamp1_hour 
        FROM mf_date_fun_t;

      返回結果如下。

      +---------------------+----------------+-------------------------------+-----------------+
      | datetime1           | datetime1_hour | timestamp1                    | timestamp1_hour |
      +---------------------+----------------+-------------------------------+-----------------+
      | 2021-11-29 00:01:00 | 0              | 2021-01-11 00:00:00.123456789 | 0               |
      | 2021-11-28 00:02:00 | 0              | 2021-02-11 00:00:00.123456789 | 0               |
      | 2021-11-27 00:03:00 | 0              | 2021-03-11 00:00:00.123456789 | 0               |
      | 2021-11-26 00:04:00 | 0              | 2021-04-11 00:00:00.123456789 | 0               |
      | 2021-11-25 00:05:00 | 0              | 2021-05-11 00:00:00.123456789 | 0               |
      | 2021-11-24 00:06:00 | 0              | 2021-06-11 00:00:00.123456789 | 0               |
      | 2021-11-23 00:07:00 | 0              | 2021-07-11 00:00:00.123456789 | 0               |
      | 2021-11-22 00:08:00 | 0              | 2021-08-11 00:00:00.123456789 | 0               |
      | 2021-11-21 00:09:00 | 0              | 2021-09-11 00:00:00.123456789 | 0               |
      | 2021-11-20 00:10:00 | 0              | 2021-10-11 00:00:00.123456789 | 0               |
      +---------------------+----------------+-------------------------------+-----------------+

ISDATE

  • 命令格式

    BOOLEAN ISDATE(STRING <date>, STRING <format>)
  • 命令說明

    判斷一個日期文字能否根據指定的格式串轉換為一個日期值。如果能轉換成功,返回True;否則返回False。

  • 參數說明

    參數

    是否必填

    說明

    date

    STRING類型。如果輸入為BIGINT、DOUBLE、DECIMAL或DATETIME類型,會隱式轉換為STRING類型後參與運算。

    format

    STRING類型常量,不支援日期擴充格式。如果format中出現多餘的格式串,則只取第一個格式串對應的日期數值,其餘的會被視為分隔字元。例如isdate("1234-yyyy", "yyyy-yyyy"),會返回True。

  • 傳回值說明

    返回BOOLEAN類型。dateformat值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回True。
      SELECT ISDATE('2021-10-11','yyyy-mm-dd');
      
      --返回false。
      SET odps.sql.type.system.odps2=false;
      SELECT ISDATE(1678952314,'yyyy-mm-dd');
    • 表資料樣本

      基於樣本資料,判斷date3是否能轉換為指定格式的日期值,命令樣本如下。

      SELECT date3, ISDATE(date3,'yyyy-mm-dd') AS date3_isdate FROM mf_date_fun_t;

      返回結果如下。

      +------------+--------------+
      | date3      | date3_isdate |
      +------------+--------------+
      | 2021-11-20 | true         |
      | 2021-11-21 | true         |
      | 2021-11-22 | true         |
      | 2021-11-23 | true         |
      | 2021-11-24 | true         |
      | 2021-11-25 | true         |
      | 2021-11-26 | true         |
      | 2021-11-27 | true         |
      | 2021-11-28 | true         |
      | 2021-11-29 | true         |
      +------------+--------------+

LAST_DAY

  • 命令格式

    STRING LAST_DAY(DATE|DATETIME|TIMESTAMP|STRING <date>)
  • 命令說明

    返回該日期所在月份的最後一天日期。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATE、DATETIME、TIMESTAMP或STRING類型日期值。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

  • 傳回值說明

    返回STRING類型的日期值,格式為yyyy-mm-dd。返回規則如下:

    • date非DATE、DATETIME、TIMESTAMP或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回報錯。

  • 樣本

    • 待用資料樣本

      --返回2017-03-31。
      SELECT LAST_DAY('2017-03-04');
      
      --返回2017-07-31。
      SELECT LAST_DAY('2017-07-04 11:40:00');
      
      --返回NULL。
      SELECT LAST_DAY('20170304');
    • 表資料樣本

      基於樣本資料,返回date1、datetime1、timestamp1和date3列日期所在月的最後一天,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true; 
      SELECT date1, 
             LAST_DAY(date1) AS date1_lastday, 
             datetime1, 
             LAST_DAY(datetime1) AS datetime1_lastday, 
             timestamp1, 
             LAST_DAY(timestamp1) AS timestamp1_lastday, 
             date3, 
             LAST_DAY(date3) AS date3_lastday 
        FROM mf_date_fun_t;

      返回結果如下。

      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
      | date1      | date1_lastday | datetime1           | datetime1_lastday | timestamp1                    | timestamp1_lastday | date3      | date3_lastday |
      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
      | 2021-11-29 | 2021-11-30    | 2021-11-29 00:01:00 | 2021-11-30        | 2021-01-11 00:00:00.123456789 | 2021-01-31         | 2021-11-20 | 2021-11-30    |
      | 2021-11-28 | 2021-11-30    | 2021-11-28 00:02:00 | 2021-11-30        | 2021-02-11 00:00:00.123456789 | 2021-02-28         | 2021-11-21 | 2021-11-30    |
      | 2021-11-27 | 2021-11-30    | 2021-11-27 00:03:00 | 2021-11-30        | 2021-03-11 00:00:00.123456789 | 2021-03-31         | 2021-11-22 | 2021-11-30    |
      | 2021-11-26 | 2021-11-30    | 2021-11-26 00:04:00 | 2021-11-30        | 2021-04-11 00:00:00.123456789 | 2021-04-30         | 2021-11-23 | 2021-11-30    |
      | 2021-11-25 | 2021-11-30    | 2021-11-25 00:05:00 | 2021-11-30        | 2021-05-11 00:00:00.123456789 | 2021-05-31         | 2021-11-24 | 2021-11-30    |
      | 2021-11-24 | 2021-11-30    | 2021-11-24 00:06:00 | 2021-11-30        | 2021-06-11 00:00:00.123456789 | 2021-06-30         | 2021-11-25 | 2021-11-30    |
      | 2021-11-23 | 2021-11-30    | 2021-11-23 00:07:00 | 2021-11-30        | 2021-07-11 00:00:00.123456789 | 2021-07-31         | 2021-11-26 | 2021-11-30    |
      | 2021-11-22 | 2021-11-30    | 2021-11-22 00:08:00 | 2021-11-30        | 2021-08-11 00:00:00.123456789 | 2021-08-31         | 2021-11-27 | 2021-11-30    |
      | 2021-11-21 | 2021-11-30    | 2021-11-21 00:09:00 | 2021-11-30        | 2021-09-11 00:00:00.123456789 | 2021-09-30         | 2021-11-28 | 2021-11-30    |
      | 2021-11-20 | 2021-11-30    | 2021-11-20 00:10:00 | 2021-11-30        | 2021-10-11 00:00:00.123456789 | 2021-10-31         | 2021-11-29 | 2021-11-30    |
      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+

LASTDAY

  • 命令格式

    DATETIME LASTDAY(DATETIME <date>)
  • 命令說明

    date所在月的最後一天,截取到天,時分秒部分為00:00:00

  • 參數說明

    date:DATETIME類型日期值,格式為yyyy-mm-dd hh:mi:ss。如果輸入為STRING類型,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為DATETIME類型後參與運算。

  • 傳回值說明

    返回DATETIME類型,格式為yyyy-mm-dd hh:mi:ss。返回規則如下:

    • date非DATETIME或STRING類型,或格式不符合要求時,會返回報錯。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回2013-06-30 00:00:00。
      SELECT LASTDAY (DATETIME '2013-06-08 01:10:00');
      
      --返回2013-06-30 00:00:00。
      SET odps.sql.type.system.odps2=false;
      SELECT LASTDAY ('2013-06-08 01:10:00');
      
      --返回NULL。
      SELECT LASTDAY (null);
    • 表資料樣本

      基於樣本資料,返回datetime1列日期所在月的最後一天,命令樣本如下。

      SELECT datetime1, LASTDAY(datetime1) AS datetime1_lastday FROM mf_date_fun_t;

      返回結果如下。

      +---------------------+---------------------+
      | datetime1           | datetime1_lastday   |
      +---------------------+---------------------+
      | 2021-11-29 00:01:00 | 2021-11-30 00:00:00 |
      | 2021-11-28 00:02:00 | 2021-11-30 00:00:00 |
      | 2021-11-27 00:03:00 | 2021-11-30 00:00:00 |
      | 2021-11-26 00:04:00 | 2021-11-30 00:00:00 |
      | 2021-11-25 00:05:00 | 2021-11-30 00:00:00 |
      | 2021-11-24 00:06:00 | 2021-11-30 00:00:00 |
      | 2021-11-23 00:07:00 | 2021-11-30 00:00:00 |
      | 2021-11-22 00:08:00 | 2021-11-30 00:00:00 |
      | 2021-11-21 00:09:00 | 2021-11-30 00:00:00 |
      | 2021-11-20 00:10:00 | 2021-11-30 00:00:00 |
      +---------------------+---------------------+

MINUTE

  • 命令格式

    INT MINUTE(DATETIME|TIMESTAMP|STRING <date>)
  • 命令說明

    返回日期分鐘部分的值。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATETIME、TIMESTAMP或STRING類型日期值,格式為yyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3

  • 傳回值說明

    返回INT類型。返回規則如下:

    • date非DATETIME、TIMESTAMP或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回30。 
      SELECT MINUTE('2014-09-01 12:30:00'); 
      
      --返回30。
      SELECT MINUTE('12:30:00');
      
      --返回NULL。
      SELECT MINUTE('20140901120000');
      
      --返回NULL。
      SELECT MINUTE(null);
    • 表資料樣本

      基於樣本資料,返回datetime1和timestamp1分鐘部分的值,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交 
      SET odps.sql.type.system.odps2=true;
      SELECT datetime1, 
             MINUTE(datetime1) AS datetime1_minute, 
             timestamp1, 
             MINUTE(timestamp1) AS timestamp1_minute 
        FROM mf_date_fun_t;

      返回結果如下。

      +---------------------+------------------+-------------------------------+-------------------+
      | datetime1           | datetime1_minute | timestamp1                    | timestamp1_minute |
      +---------------------+------------------+-------------------------------+-------------------+
      | 2021-11-29 00:01:00 | 1                | 2021-01-11 00:00:00.123456789 | 0                 |
      | 2021-11-28 00:02:00 | 2                | 2021-02-11 00:00:00.123456789 | 0                 |
      | 2021-11-27 00:03:00 | 3                | 2021-03-11 00:00:00.123456789 | 0                 |
      | 2021-11-26 00:04:00 | 4                | 2021-04-11 00:00:00.123456789 | 0                 |
      | 2021-11-25 00:05:00 | 5                | 2021-05-11 00:00:00.123456789 | 0                 |
      | 2021-11-24 00:06:00 | 6                | 2021-06-11 00:00:00.123456789 | 0                 |
      | 2021-11-23 00:07:00 | 7                | 2021-07-11 00:00:00.123456789 | 0                 |
      | 2021-11-22 00:08:00 | 8                | 2021-08-11 00:00:00.123456789 | 0                 |
      | 2021-11-21 00:09:00 | 9                | 2021-09-11 00:00:00.123456789 | 0                 |
      | 2021-11-20 00:10:00 | 10               | 2021-10-11 00:00:00.123456789 | 0                 |
      +---------------------+------------------+-------------------------------+-------------------+

MONTH

  • 命令格式

    INT MONTH(DATETIME|TIMESTAMP|DATE|STRING <date>) 
  • 命令說明

    返回一個日期的月份。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATETIME、TIMESTAMP、DATE或STRING類型日期值,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

  • 傳回值說明

    返回INT類型。返回規則如下:

    • date非DATETIME、TIMESTAMP、DATE或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回9。 
      SELECT MONTH('2014-09-01');
      
      --返回NULL。
      SELECT MONTH('20140901');
      
      --返回NULL。
      SELECT MONTH(null);
    • 表資料樣本

      基於樣本資料,返回date1、datetime1、timestamp1和date3列日期所屬月份,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             MONTH(date1) AS date1_month, 
             datetime1, 
             MONTH(datetime1) AS datetime1_month, 
             timestamp1, 
             MONTH(timestamp1) AS timestamp1_month, 
             date3, 
             MONTH(date3) AS date3_month 
        FROM mf_date_fun_t;

      返回結果如下。

      +------------+-------------+---------------------+-----------------+-------------------------------+------------------+------------+-------------+
      | date1      | date1_month | datetime1           | datetime1_month | timestamp1                    | timestamp1_month | date3      | date3_month |
      +------------+-------------+---------------------+-----------------+-------------------------------+------------------+------------+-------------+
      | 2021-11-29 | 11          | 2021-11-29 00:01:00 | 11              | 2021-01-11 00:00:00.123456789 | 1                | 2021-11-20 | 11          |
      | 2021-11-28 | 11          | 2021-11-28 00:02:00 | 11              | 2021-02-11 00:00:00.123456789 | 2                | 2021-11-21 | 11          |
      | 2021-11-27 | 11          | 2021-11-27 00:03:00 | 11              | 2021-03-11 00:00:00.123456789 | 3                | 2021-11-22 | 11          |
      | 2021-11-26 | 11          | 2021-11-26 00:04:00 | 11              | 2021-04-11 00:00:00.123456789 | 4                | 2021-11-23 | 11          |
      | 2021-11-25 | 11          | 2021-11-25 00:05:00 | 11              | 2021-05-11 00:00:00.123456789 | 5                | 2021-11-24 | 11          |
      | 2021-11-24 | 11          | 2021-11-24 00:06:00 | 11              | 2021-06-11 00:00:00.123456789 | 6                | 2021-11-25 | 11          |
      | 2021-11-23 | 11          | 2021-11-23 00:07:00 | 11              | 2021-07-11 00:00:00.123456789 | 7                | 2021-11-26 | 11          |
      | 2021-11-22 | 11          | 2021-11-22 00:08:00 | 11              | 2021-08-11 00:00:00.123456789 | 8                | 2021-11-27 | 11          |
      | 2021-11-21 | 11          | 2021-11-21 00:09:00 | 11              | 2021-09-11 00:00:00.123456789 | 9                | 2021-11-28 | 11          |
      | 2021-11-20 | 11          | 2021-11-20 00:10:00 | 11              | 2021-10-11 00:00:00.123456789 | 10               | 2021-11-29 | 11          |
      +------------+-------------+---------------------+-----------------+-------------------------------+------------------+------------+-------------+

MONTHS_BETWEEN

  • 命令格式

    DOUBLE MONTHS_BETWEEN(DATETIME|TIMESTAMP|DATE|STRING <date1>, DATETIME|TIMESTAMP|DATE|STRING <date2>) 
  • 命令說明

    返回日期date1date2之間的月數。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date1date2:必填。DATETIME、TIMESTAMP、DATE或STRING類型,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

  • 傳回值說明

    返回DOUBLE類型。返回規則如下:

    • date1晚於date2時,傳回值為正。當date2晚於date1時,傳回值為負。

    • date1date2分別對應兩個月的最後一天,返回整數月;否則計算方式為date1減去date2的天數除以31天。

    • date1date2值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回3.9495967741935485。 
      SELECT MONTHS_BETWEEN('1997-02-28 10:30:00', '1996-10-30');
      
      --返回-3.9495967741935485。
      SELECT MONTHS_BETWEEN('1996-10-30','1997-02-28 10:30:00' );
      
      --返回-3.0。
      SELECT MONTHS_BETWEEN('1996-09-30','1996-12-31');
      
      --返回NULL。
      SELECT MONTHS_BETWEEN('1996-09-30', null);
    • 表資料樣本

      基於樣本資料,計算timestamp1和timestamp2列之間的月數,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true; 
      SELECT timestamp1, timestamp2, MONTHS_BETWEEN(timestamp1, timestamp2) FROM mf_date_fun_t;

      返回結果如下。

      +-------------------------------+-------------------------------+------------+
      | timestamp1                    | timestamp2                    | _c2        |
      +-------------------------------+-------------------------------+------------+
      | 2021-01-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -9.0       |
      | 2021-02-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -8.0       |
      | 2021-03-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -7.0       |
      | 2021-04-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -6.0       |
      | 2021-05-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -5.0       |
      | 2021-06-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -4.0       |
      | 2021-07-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -3.0       |
      | 2021-08-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -2.0       |
      | 2021-09-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -1.0       |
      | 2021-10-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | 0.0        |
      +------------+------------+------------+

NEXT_DAY

  • 命令格式

    STRING NEXT_DAY(TIMESTAMP|DATE|DATETIME|STRING <startdate>, STRING <week>)
  • 命令說明

    返回大於指定日期startdate並且與week相匹配的第一個日期,即下周幾的具體日期。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    參數

    是否必填

    說明

    startdate

    TIMESTAMP、DATE、DATETIME或STRING類型日期值,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

    week

    STRING類型,一個星期前2個或3個字母,或者一個星期的全名。例如MO、TUE或FRIDAY。

  • 傳回值說明

    返回STRING類型的日期值,格式為yyyy-mm-dd。返回規則如下:

    • date非TIMESTAMP、DATE、DATETIME或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回報錯。

    • week值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回2017-08-08。 
      SELECT NEXT_DAY('2017-08-01','TU');
      
      --返回2017-08-08。
      SELECT NEXT_DAY('2017-08-01 23:34:00', 'TU');
      
      --返回NULL。
      SELECT NEXT_DAY('20170801','TU');
      
      --返回NULL。
      SELECT NEXT_DAY('2017-08-01 23:34:00', null);
    • 表資料樣本

      基於樣本資料,返回date1、datetime1、timestamp1和date3列對應下周的具體日期,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             NEXT_DAY(date1,'MON') AS date1_next_day, 
             datetime1, 
             NEXT_DAY(datetime1,'TUE') AS datetime1_next_day, 
             timestamp1, 
             NEXT_DAY(timestamp1,'WED') AS timestamp1_next_day, 
             date3, 
             NEXT_DAY(date3,'THU') AS date3_next_day 
        FROM mf_date_fun_t;

      返回結果如下。

      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+
      | date1      | date1_next_day | datetime1           | datetime1_next_day | timestamp1                    | timestamp1_next_day | date3      | date3_next_day |
      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+
      | 2021-11-29 | 2021-12-06     | 2021-11-29 00:01:00 | 2021-11-30         | 2021-01-11 00:00:00.123456789 | 2021-01-13          | 2021-11-20 | 2021-11-25     |
      | 2021-11-28 | 2021-11-29     | 2021-11-28 00:02:00 | 2021-11-30         | 2021-02-11 00:00:00.123456789 | 2021-02-17          | 2021-11-21 | 2021-11-25     |
      | 2021-11-27 | 2021-11-29     | 2021-11-27 00:03:00 | 2021-11-30         | 2021-03-11 00:00:00.123456789 | 2021-03-17          | 2021-11-22 | 2021-11-25     |
      | 2021-11-26 | 2021-11-29     | 2021-11-26 00:04:00 | 2021-11-30         | 2021-04-11 00:00:00.123456789 | 2021-04-14          | 2021-11-23 | 2021-11-25     |
      | 2021-11-25 | 2021-11-29     | 2021-11-25 00:05:00 | 2021-11-30         | 2021-05-11 00:00:00.123456789 | 2021-05-12          | 2021-11-24 | 2021-11-25     |
      | 2021-11-24 | 2021-11-29     | 2021-11-24 00:06:00 | 2021-11-30         | 2021-06-11 00:00:00.123456789 | 2021-06-16          | 2021-11-25 | 2021-12-02     |
      | 2021-11-23 | 2021-11-29     | 2021-11-23 00:07:00 | 2021-11-30         | 2021-07-11 00:00:00.123456789 | 2021-07-14          | 2021-11-26 | 2021-12-02     |
      | 2021-11-22 | 2021-11-29     | 2021-11-22 00:08:00 | 2021-11-23         | 2021-08-11 00:00:00.123456789 | 2021-08-18          | 2021-11-27 | 2021-12-02     |
      | 2021-11-21 | 2021-11-22     | 2021-11-21 00:09:00 | 2021-11-23         | 2021-09-11 00:00:00.123456789 | 2021-09-15          | 2021-11-28 | 2021-12-02     |
      | 2021-11-20 | 2021-11-22     | 2021-11-20 00:10:00 | 2021-11-23         | 2021-10-11 00:00:00.123456789 | 2021-10-13          | 2021-11-29 | 2021-12-02     |
      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+

NOW

  • 命令格式

    DATETIME NOW()
  • 命令說明

    返回當前系統日期與時間。

  • 傳回值說明

    返回DATETIME類型,格式為yyyy-mm-dd hh:mi:ss.SSS

  • 樣本

    • 不指定格式,返回毫秒位可能為1位、2位或者3位:

      SELECT NOW(); 

      返回結果如下:

      +------+
      | _c0  |
      +------+
      | 2023-06-13 10:53:24.967 |
      +------+
    • 指定時間格式:

      SELECT  DATE_FORMAT(NOW(),'yyyy-MM-dd hh:mi:ss.SSS'); 

      返回結果如下:

      +-----+
      | _c0 |
      +-----+
      | 2023-06-13 10:53:53.899 |
      +-----+

QUARTER

  • 命令格式

    INT QUARTER(DATETIME|TIMESTAMP|DATE|STRING <date>) 
  • 命令說明

    返回一個日期的季度,範圍是1~4。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATETIME、TIMESTAMP、DATE或STRING類型日期值,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

  • 傳回值說明

    返回INT類型。返回規則如下:

    • date非DATETIME、TIMESTAMP、DATE或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回4。 
      SELECT QUARTER('1970-11-12 10:00:00');
      
      --返回4。
      SELECT QUARTER('1970-11-12');
      
      --返回NULL。
      SELECT QUARTER(null);
    • 表資料樣本

      基於樣本資料,返回date1、datetime1、timestamp1和date3列日期所屬季度,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             QUARTER(date1) AS date1_quarter, 
             datetime1, 
             QUARTER(datetime1) AS datetime1_quarter, 
             timestamp1, 
             QUARTER(timestamp1) AS timestamp1_quarter, 
             date3, 
             QUARTER(date3) AS date3_quarter 
        FROM mf_date_fun_t;

      返回結果如下。

      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
      | date1      | date1_quarter | datetime1           | datetime1_quarter | timestamp1                    | timestamp1_quarter | date3      | date3_quarter |
      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
      | 2021-11-29 | 4             | 2021-11-29 00:01:00 | 4                 | 2021-01-11 00:00:00.123456789 | 1                  | 2021-11-20 | 4             |
      | 2021-11-28 | 4             | 2021-11-28 00:02:00 | 4                 | 2021-02-11 00:00:00.123456789 | 1                  | 2021-11-21 | 4             |
      | 2021-11-27 | 4             | 2021-11-27 00:03:00 | 4                 | 2021-03-11 00:00:00.123456789 | 1                  | 2021-11-22 | 4             |
      | 2021-11-26 | 4             | 2021-11-26 00:04:00 | 4                 | 2021-04-11 00:00:00.123456789 | 2                  | 2021-11-23 | 4             |
      | 2021-11-25 | 4             | 2021-11-25 00:05:00 | 4                 | 2021-05-11 00:00:00.123456789 | 2                  | 2021-11-24 | 4             |
      | 2021-11-24 | 4             | 2021-11-24 00:06:00 | 4                 | 2021-06-11 00:00:00.123456789 | 2                  | 2021-11-25 | 4             |
      | 2021-11-23 | 4             | 2021-11-23 00:07:00 | 4                 | 2021-07-11 00:00:00.123456789 | 3                  | 2021-11-26 | 4             |
      | 2021-11-22 | 4             | 2021-11-22 00:08:00 | 4                 | 2021-08-11 00:00:00.123456789 | 3                  | 2021-11-27 | 4             |
      | 2021-11-21 | 4             | 2021-11-21 00:09:00 | 4                 | 2021-09-11 00:00:00.123456789 | 3                  | 2021-11-28 | 4             |
      | 2021-11-20 | 4             | 2021-11-20 00:10:00 | 4                 | 2021-10-11 00:00:00.123456789 | 4                  | 2021-11-29 | 4             |
      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+

SECOND

  • 命令格式

    INT SECOND(DATETIME|TIMESTAMP|STRING <date>)
  • 命令說明

    返回日期秒數部分的值。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATETIME、TIMESTAMP或STRING類型日期值,格式為yyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3

  • 傳回值說明

    返回INT類型。返回規則如下:

    • date非DATETIME、TIMESTAMP或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回45。 
      SELECT SECOND('2014-09-01 12:30:45');
      
      --返回45。
      SELECT SECOND('12:30:45');
      
      --返回NULL。
      SELECT SECOND('20140901123045');
      
      --返回NULL。
      SELECT SECOND(null);
    • 表資料樣本

      基於樣本資料,返回datetime1和timestamp1列秒數部分的值,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。 
      SET odps.sql.type.system.odps2=true;
      SELECT datetime1, 
             SECOND(datetime1) AS datetime1_second, 
             timestamp1, 
             SECOND(timestamp1) AS timestamp1_second 
        FROM mf_date_fun_t;

      返回結果如下。

      +---------------------+------------------+-------------------------------+-------------------+
      | datetime1           | datetime1_second | timestamp1                    | timestamp1_second |
      +---------------------+------------------+-------------------------------+-------------------+
      | 2021-11-29 00:01:00 | 0                | 2021-01-11 00:00:00.123456789 | 0                 |
      | 2021-11-28 00:02:00 | 0                | 2021-02-11 00:00:00.123456789 | 0                 |
      | 2021-11-27 00:03:00 | 0                | 2021-03-11 00:00:00.123456789 | 0                 |
      | 2021-11-26 00:04:00 | 0                | 2021-04-11 00:00:00.123456789 | 0                 |
      | 2021-11-25 00:05:00 | 0                | 2021-05-11 00:00:00.123456789 | 0                 |
      | 2021-11-24 00:06:00 | 0                | 2021-06-11 00:00:00.123456789 | 0                 |
      | 2021-11-23 00:07:00 | 0                | 2021-07-11 00:00:00.123456789 | 0                 |
      | 2021-11-22 00:08:00 | 0                | 2021-08-11 00:00:00.123456789 | 0                 |
      | 2021-11-21 00:09:00 | 0                | 2021-09-11 00:00:00.123456789 | 0                 |
      | 2021-11-20 00:10:00 | 0                | 2021-10-11 00:00:00.123456789 | 0                 |
      +---------------------+------------------+-------------------------------+-------------------+

TO_CHAR

  • 命令格式

    STRING TO_CHAR(DATETIME <date>, STRING <format>) 
  • 命令說明

    將日期類型date按照format指定的格式轉成字串。

  • 參數說明

    參數

    是否必填

    說明

    date

    DATETIME類型日期值,格式為yyyy-mm-dd hh:mi:ss。如果輸入為STRING類型,且MaxCompute專案的資料類型版本是1.0,會隱式轉換為DATETIME類型後參與運算。

    format

    STRING類型常量。format中的日期格式部分會被替換成相應的資料,其他字元直接輸出。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • date非DATETIME或STRING類型時,返回報錯。

    • date值為NULL時,返回報錯。

    • format值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      • 樣本1

        --需要注意在Windows環境的MaxCompute用戶端運行時返回結果中的中文字元顯示存在問題 
        SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00','阿里金融yyyy-mm*dd');

        返回結果如下。

        +------------+
        | _c0        |
        +------------+
        | 阿里金融2010-12*03 |
        +------------+
      • 樣本2

        SELECT TO_CHAR(DATETIME '2008-07-18 00:00:00','yyyymmdd'); 

        返回結果如下。

        +------------+
        | _c0        |
        +------------+
        | 20080718   |
        +------------+
      • 樣本3

        SET odps.sql.type.system.odps2=false; 
        SELECT TO_CHAR('2008-07-18 00:00:00', 'yyyymmdd');

        返回結果如下。

        +------------+
        | _c0        |
        +------------+
        | 20080718   |
        +------------+
      • 樣本4

        --'阿里巴巴2010-12*3'無法轉換為符合要求的格式,會引發異常。 
        SELECT TO_CHAR(DATETIME '阿里巴巴2010-12*3', '阿里巴巴yyyy-mm*dd');
      • 樣本5

        --'20102401'不是標準日期值,引發異常。 
        SELECT TO_CHAR(DATETIME '20102401', 'yyyy');
      • 樣本6

        SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00', null); 

        返回結果如下。

        +------------+
        | _c0        |
        +------------+
        | NULL       |
        +------------+
    • 表資料樣本

      基於樣本資料,將datetime1列日期轉換為滿足指定格式的字串,命令樣本如下。

      SELECT  datetime1, TO_CHAR(datetime1,'yyyy-mm-dd') AS datetime1_to_char
      FROM mf_date_fun_t; 

      返回結果如下。

      +---------------------+-------------------+
      | datetime1           | datetime1_to_char |
      +---------------------+-------------------+
      | 2021-11-29 00:01:00 | 2021-11-29        |
      | 2021-11-28 00:02:00 | 2021-11-28        |
      | 2021-11-27 00:03:00 | 2021-11-27        |
      | 2021-11-26 00:04:00 | 2021-11-26        |
      | 2021-11-25 00:05:00 | 2021-11-25        |
      | 2021-11-24 00:06:00 | 2021-11-24        |
      | 2021-11-23 00:07:00 | 2021-11-23        |
      | 2021-11-22 00:08:00 | 2021-11-22        |
      | 2021-11-21 00:09:00 | 2021-11-21        |
      | 2021-11-20 00:10:00 | 2021-11-20        |
      +---------------------+-------------------+

TO_DATE

  • 命令格式

    DATETIME|DATE TO_DATE(STRING <date>[, STRING <format>])
  • 命令說明

    date轉換成符合format格式的日期值。

  • 參數說明

    參數

    是否必填

    說明

    date

    STRING類型,要轉換的字串格式的日期值。如果輸入為BIGINT、DOUBLE、DECIMAL或DATETIME類型,則會隱式轉換為STRING類型後參與運算。該函數還支援ISO8601時間格式的字串。

    format

    • STRING類型常量,日期格式。format不支援日期擴充格式,其他字元在解析時當作無用字元忽略。

    • 參數至少包含yyyy,否則會返回NULL。如果format中出現多餘的格式串,則只取第一個格式串對應的日期數值,其餘的會被視為分隔字元。例如TO_DATE("1234-2234", "yyyy-yyyy")會返回1234-01-01 00:00:00

    • yyyy為4位元的年,mm為2位元的月,dd為2位元的日,hh為24小時制的時,mi為2位元的分鐘,ss為2位元秒,ff3為3位精度毫秒。

  • 傳回值說明

    返回DATE或DATETIME類型。

    • 當函數入參無format參數,且待轉換的字串格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ss時,返回DATE類型,格式為yyyy-mm-dd;否則,返回NULL。

    • 當函數入參有format參數時,返回DATETIME類型,格式為yyyy-mm-dd hh:mi:ssdateformat值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回2010-12-03 00:00:00。 
      SELECT TO_DATE('阿里巴巴2010-12*03', '阿里巴巴yyyy-mm*dd');
      
      --返回2008-07-18 00:00:00。
      SELECT TO_DATE('20080718', 'yyyymmdd');
      
      --返回2008-07-18 20:30:00。
      SELECT TO_DATE('200807182030','yyyymmddhhmi');
      
      --'2008718'無法轉為標準日期值,引發異常,應該為'20080718'。
      SELECT TO_DATE('2008718', 'yyyymmdd');
      
      --'阿里巴巴2010-12*3'無法轉為標準日期值,引發異常,應該為'阿里巴巴2010-12*03'。
      SELECT TO_DATE('阿里巴巴2010-12*3', '阿里巴巴yyyy-mm*dd');
      
      --'2010-24-01'無法轉為標準日期值,引發異常,應該為'2010-01-24'。
      SELECT TO_DATE('2010-24-01', 'yyyy-mm-dd');
      
      --返回2018-10-30 15:13:12。
      SELECT TO_DATE('20181030 15-13-12.345','yyyymmdd hh-mi-ss.ff3');
      
      --返回NULL。
      SELECT TO_DATE(null,'yyyymmdd hh-mi-ss.ff3');
      
      --返回NULL。
      SELECT TO_DATE('20181030 15-13-12.345', null);
      
      --ISO8601時間格式,返回2021-09-24 13:39:34。
      SELECT TO_DATE('2021-09-24T13:39:34.119Z', 'yyyy-MM-ddThh:mi:ss.ff3Z');
      
      --返回2021-09-24,資料類型為Date。
      SELECT TO_DATE('2021-09-24');
      
      --返回2021-09-24,資料類型為Date。
      SELECT TO_DATE('2021-09-24 13:39:34');
      
      --返回NULL。
      SELECT TO_DATE('20210924');
    • 表資料樣本

      基於樣本資料,將date3列日期轉換為滿足指定格式的日期值,命令樣本如下。

      SELECT date3, TO_DATE(date3, 'yyyy-mm-dd') AS date3_to_date FROM mf_date_fun_t; 

      返回結果如下。

      +------------+---------------------+
      | date3      | date3_to_date       |
      +------------+---------------------+
      | 2021-11-20 | 2021-11-20 00:00:00 |
      | 2021-11-21 | 2021-11-21 00:00:00 |
      | 2021-11-22 | 2021-11-22 00:00:00 |
      | 2021-11-23 | 2021-11-23 00:00:00 |
      | 2021-11-24 | 2021-11-24 00:00:00 |
      | 2021-11-25 | 2021-11-25 00:00:00 |
      | 2021-11-26 | 2021-11-26 00:00:00 |
      | 2021-11-27 | 2021-11-27 00:00:00 |
      | 2021-11-28 | 2021-11-28 00:00:00 |
      | 2021-11-29 | 2021-11-29 00:00:00 |
      +------------+---------------------+

TO_MILLIS

  • 命令格式

    BIGINT TO_MILLIS(DATETIME|TIMESTAMP <date>);
  • 命令說明

    將給定日期date轉換為以毫秒為單位的UNIX時間戳記。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATETIME或TIMESTAMP類型日期值,格式為yyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3

  • 傳回值說明

    返回BIGINT類型。返回規則如下:

    • date非DATETIME或TIMESTAMP類型時,返回報錯。

    • date值為NULL時,返回報錯。

  • 樣本

    • 待用資料樣本

      --返回1617174900000。 
      SELECT TO_MILLIS(datetime '2021-03-31 15:15:00');
      
      --返回1617174900000。
      SET odps.sql.type.system.odps2=true;
      SELECT TO_MILLIS(timestamp '2021-03-31 15:15:00');
    • 表資料樣本

      基於樣本資料,將datetime1和timestamp1轉換為以毫秒為單位的UNIX時間戳記,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。
      SET odps.sql.type.system.odps2=true; 
      SELECT datetime1, 
             TO_MILLIS(datetime1) AS datetime1_to_millis, 
             timestamp1, 
             TO_MILLIS(timestamp1) AS timestamp1_to_millis 
        FROM mf_date_fun_t;

      返回結果如下。

      +---------------------+---------------------+-------------------------------+----------------------+
      | datetime1           | datetime1_to_millis | timestamp1                    | timestamp1_to_millis |
      +---------------------+---------------------+-------------------------------+----------------------+
      | 2021-11-29 00:01:00 | 1638115260000       | 2021-01-11 00:00:00.123456789 | 1610294400123        |
      | 2021-11-28 00:02:00 | 1638028920000       | 2021-02-11 00:00:00.123456789 | 1612972800123        |
      | 2021-11-27 00:03:00 | 1637942580000       | 2021-03-11 00:00:00.123456789 | 1615392000123        |
      | 2021-11-26 00:04:00 | 1637856240000       | 2021-04-11 00:00:00.123456789 | 1618070400123        |
      | 2021-11-25 00:05:00 | 1637769900000       | 2021-05-11 00:00:00.123456789 | 1620662400123        |
      | 2021-11-24 00:06:00 | 1637683560000       | 2021-06-11 00:00:00.123456789 | 1623340800123        |
      | 2021-11-23 00:07:00 | 1637597220000       | 2021-07-11 00:00:00.123456789 | 1625932800123        |
      | 2021-11-22 00:08:00 | 1637510880000       | 2021-08-11 00:00:00.123456789 | 1628611200123        |
      | 2021-11-21 00:09:00 | 1637424540000       | 2021-09-11 00:00:00.123456789 | 1631289600123        |
      | 2021-11-20 00:10:00 | 1637338200000       | 2021-10-11 00:00:00.123456789 | 1633881600123        |
      +---------------------+---------------------+-------------------------------+----------------------+

TRUNC_TIME

  • 命令格式

    string TRUNC_TIME(date|datetime|timestamp|timestamp_ntz <date>, string <datepart>)
  • 命令說明

    將日期或時間類型資料按照datepart指定的時間單位進行截取後,返回STRING類型資料。

  • 參數說明

    • date:必填。支援DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ類型。如果輸入為STRING類型,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為DATETIME類型後參與運算。

    • datepart:必填。STRING類型常量,忽略大小寫,支援year(年)、month(月)、day(日)和hour(小時)。

  • 傳回值說明

    返回STRING類型。

    返回STRING格式如下:

    • datepart取值為'year':返回STRING格式為yyyy

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

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

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

    返回規則如下:

    • date為非DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ類型時,返回報錯。僅在MaxCompute專案的資料類型為1.0版本時,date支援STRING類型。

    • datepart為NULL時,返回報錯。

  • 樣本

    • 時間為DATETIME類型

      例如,當前Session或者Project時區為東八區,本地時間是datetime '2025-06-03 07:15:08',TRUNC_TIME函數會先將本地時間轉換為UTC時間'2025-06-02 23:15:08',然後按照datepart截取計算,將結果轉換為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 |
      +------------+------------+------------+------------+
    • 時間為DATE類型

      例如,輸入時間是date '2025-06-10',TRUNC_TIME函數會將DATE類型資料按照datepart指定的時間單位截取後,返回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 |
      +------------+------------+------------+
    • 時間為STRING類型

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

      SET odps.sql.type.system.odps2=false;
      SELECT TRUNC_TIME('2025-06-03 15:30:30','hour');

      返回結果如下。

      +------------+
      | _c0        |
      +------------+
      | 2025-06-03 07:00:00 |
      +------------+

UNIX_TIMESTAMP

  • 命令格式

    BIGINT UNIX_TIMESTAMP(DATETIME|DATE|TIMESTAMP|STRING <date>) 
  • 命令說明

    將日期date轉化為整型的UNIX格式的日期時間值。

  • 參數說明

    date:必填。DATETIME、DATE、TIMESTAMP或STRING類型日期值,格式為yyyy-mm-dd hh:mi:ssyyyy-mm-ddyyyy-mm-dd hh:mi:ss.ff3。如果輸入為STRING類型,且MaxCompute專案的資料類型版本是1.0資料類型版本,則會隱式轉換為DATETIME類型後參與運算。當使用MaxCompute2.0資料類型版本(2.0資料類型版本)時,隱式轉換會失敗,此時需要通過cast函數轉換或關閉新資料類型,例如unix_timestamp(cast(... as datetime))

    說明

    當入參為常量資料(非表資料)時,格式應寫為:DATETIME'yyyy-mm-dd hh:mi:ss'DATE'yyyy-mm-dd'TIMESTAMP'yyyy-mm-dd hh:mi:ss.ff3',無資料類型關鍵字時(即寫為'yyyy-mm-dd hh:mi:ss'),會識別為STRING類型。

  • 傳回值說明

    返回BIGINT類型,表示UNIX格式日期值。返回規則如下:

    • date非DATETIME、DATE、TIMESTAMP或STRING類型,或格式不符合要求時,返回報錯或NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回1699585860。
      SELECT UNIX_TIMESTAMP(DATETIME'2023-11-10 11:11:00'); 
       
      --返回1699545600
      SET odps.sql.type.system.odps2=true;
      SELECT UNIX_TIMESTAMP(DATE'2023-11-10');
      
      --返回1699585860
      SET odps.sql.type.system.odps2=true;
      SELECT UNIX_TIMESTAMP(TIMESTAMP'2023-11-10 11:11:00.123456789');
      
      --返回1237518660。
      SET odps.sql.type.system.odps2=false;
      SELECT UNIX_TIMESTAMP('2009-03-20 11:11:00'); 
      
      --返回NULL。
      SELECT UNIX_TIMESTAMP(null);
    • 表資料樣本

      基於樣本資料,將date1、datetime1和timestamp1列日期轉換為整型的UNIX格式的日期值,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL語句一起提交。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             UNIX_TIMESTAMP(date1) AS date1_unix_timestamp, 
             datetime1, 
             UNIX_TIMESTAMP(datetime1) AS datetime1_unix_timestamp, 
             timestamp1, 
             UNIX_TIMESTAMP(timestamp1) AS timestamp1_unix_timestamp 
        FROM mf_date_fun_t;

      返回結果如下。

      +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+
      | date1      | date1_unix_timestamp | datetime1           | datetime1_unix_timestamp | timestamp1                   | timestamp1_unix_timestamp |
      +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+
      | 2021-11-29 | 1638115200           | 2021-11-29 00:01:00 | 1638115260               | 2021-01-11 00:00:00.123456789 | 1610294400                |
      | 2021-11-28 | 1638028800           | 2021-11-28 00:02:00 | 1638028920               | 2021-02-11 00:00:00.123456789 | 1612972800                |
      | 2021-11-27 | 1637942400           | 2021-11-27 00:03:00 | 1637942580               | 2021-03-11 00:00:00.123456789 | 1615392000                |
      | 2021-11-26 | 1637856000           | 2021-11-26 00:04:00 | 1637856240               | 2021-04-11 00:00:00.123456789 | 1618070400                |
      | 2021-11-25 | 1637769600           | 2021-11-25 00:05:00 | 1637769900               | 2021-05-11 00:00:00.123456789 | 1620662400                |
      | 2021-11-24 | 1637683200           | 2021-11-24 00:06:00 | 1637683560               | 2021-06-11 00:00:00.123456789 | 1623340800                |
      | 2021-11-23 | 1637596800           | 2021-11-23 00:07:00 | 1637597220               | 2021-07-11 00:00:00.123456789 | 1625932800                |
      | 2021-11-22 | 1637510400           | 2021-11-22 00:08:00 | 1637510880               | 2021-08-11 00:00:00.123456789 | 1628611200                |
      | 2021-11-21 | 1637424000           | 2021-11-21 00:09:00 | 1637424540               | 2021-09-11 00:00:00.123456789 | 1631289600                |
      | 2021-11-20 | 1637337600           | 2021-11-20 00:10:00 | 1637338200               | 2021-10-11 00:00:00.123456789 | 1633881600                |
      +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+

WEEKDAY

  • 命令格式

    BIGINT WEEKDAY(DATETIME <date>)
  • 命令說明

    返回date日期是當前周的第幾天。

  • 參數說明

    date:必填。DATETIME類型日期值。格式為yyyy-mm-dd hh:mi:ss。如果輸入為STRING類型,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為DATETIME類型後參與運算。

  • 傳回值說明

    返回BIGINT類型。返回規則如下:

    • 周一作為一周的第一天,傳回值為0。其他日期依次遞增,周日返回6。

    • date非DATETIME或STRING類型,或格式不符合要求時,返回報錯。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回4。
      SELECT WEEKDAY(datetime '2009-03-20 11:11:00'); 
      
      --返回4。
      SET odps.sql.type.system.odps2=false;
      SELECT WEEKDAY('2009-03-20 11:11:00');
      
      --返回NULL。
      SELECT WEEKDAY(null);
    • 表資料樣本

      基於樣本資料,計算datetime1列日期為所在周的第幾天,命令樣本如下。

      SELECT datetime1, WEEKDAY(datetime1) AS datetime1_weekday FROM mf_date_fun_t; 

      返回結果如下。

      +---------------------+-------------------+
      | datetime1           | datetime1_weekday |
      +---------------------+-------------------+
      | 2021-11-29 00:01:00 | 0                 |
      | 2021-11-28 00:02:00 | 6                 |
      | 2021-11-27 00:03:00 | 5                 |
      | 2021-11-26 00:04:00 | 4                 |
      | 2021-11-25 00:05:00 | 3                 |
      | 2021-11-24 00:06:00 | 2                 |
      | 2021-11-23 00:07:00 | 1                 |
      | 2021-11-22 00:08:00 | 0                 |
      | 2021-11-21 00:09:00 | 6                 |
      | 2021-11-20 00:10:00 | 5                 |
      +---------------------+-------------------+

WEEKOFYEAR

  • 命令格式

    BIGINT WEEKOFYEAR(DATETIME <date>)
  • 命令說明

    返回日期date位於那一年的第幾周。周一作為一周的第一天。

    說明

    這一周算上一年還是下一年,取決於這一周的大多數日期(4天以上)在哪一年。算在前一年,就是前一年的最後一周;算在後一年就是後一年的第一周。

  • 參數說明

    date:必填。DATETIME類型日期值。格式為yyyy-mm-dd hh:mi:ss。如果輸入為STRING類型,且MaxCompute專案的資料類型版本是1.0,則會隱式轉換為DATETIME類型後參與運算。

  • 傳回值說明

    返回BIGINT類型。返回規則如下:

    • date非DATETIME或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回1。雖然20141229屬於2014年,但是這一周的大多數日期是在2015年,因此返回結果為1,表示是2015年的第一周。 
      SELECT WEEKOFYEAR(TO_DATE("20141229", "yyyymmdd"));  
      
      --返回1。    
      SELECT WEEKOFYEAR(TO_DATE("20141231", "yyyymmdd")); 
      
      --返回53。 
      SELECT WEEKOFYEAR(TO_DATE("20151229", "yyyymmdd"));
      
      --返回48。
      SET odps.sql.type.system.odps2=false;
      SELECT WEEKOFYEAR('2021-11-29 00:01:00');
      
      --返回NULL。
      SELECT WEEKOFYEAR('20141231');
      
      --返回NULL。
      SELECT WEEKOFYEAR(null);
    • 表資料樣本

      基於樣本資料,計算datetime1列日期為所在年的第幾周,命令樣本如下。

      SELECT datetime1, WEEKOFYEAR(datetime1) AS datetime1_weekofyear FROM mf_date_fun_t; 

      返回結果如下。

      +---------------------+----------------------+
      | datetime1           | datetime1_weekofyear |
      +---------------------+----------------------+
      | 2021-11-29 00:01:00 | 48                   |
      | 2021-11-28 00:02:00 | 47                   |
      | 2021-11-27 00:03:00 | 47                   |
      | 2021-11-26 00:04:00 | 47                   |
      | 2021-11-25 00:05:00 | 47                   |
      | 2021-11-24 00:06:00 | 47                   |
      | 2021-11-23 00:07:00 | 47                   |
      | 2021-11-22 00:08:00 | 47                   |
      | 2021-11-21 00:09:00 | 46                   |
      | 2021-11-20 00:10:00 | 46                   |
      +---------------------+----------------------+

YEAR

  • 命令格式

    INT YEAR(DATETIME|TIMESTAMP|DATE|STRING <date>) 
  • 命令說明

    返回日期date的年。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    date:必填。DATETIME、TIMESTAMP、DATE或STRING類型日期值,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。取值為STRING類型格式時,至少要包含yyyy-mm-dd且不含多餘的字串。

  • 傳回值

    返回INT類型。返回規則如下:

    • date非DATETIME、TIMESTAMP、DATE或STRING類型,或格式不符合要求時,返回NULL。

    • date值為NULL時,返回NULL。

  • 樣本

    • 待用資料樣本

      --返回1970。
      SELECT YEAR('1970-01-01 12:30:00');
      
      --返回1970。
      SELECT YEAR('1970-01-01'); 
      
      --返回70。
      SELECT YEAR('70-01-01');
      
      --返回NULL。
      SELECT YEAR('1970/03/09'); 
      
      --返回NULL。
      SELECT YEAR(null); 
    • 表資料樣本

      基於樣本資料,返回date1、datetime1、timestamp1和date3列日期所屬年份,命令樣本如下。

      --開啟2.0新類型。此命令需要與SQL一起提交。
      SET odps.sql.type.system.odps2=true;
      SELECT date1,  
             YEAR(date1) AS date1_year, 
             datetime1, 
             YEAR(datetime1) AS datetime1_year, 
             timestamp1, 
             YEAR(timestamp1) AS timestamp1_year, 
             date3, 
             YEAR(date3) AS date3_year 
        FROM mf_date_fun_t;

      返回結果如下。

      +------------+------------+---------------------+----------------+-------------------------------+-----------------+------------+------------+
      | date1      | date1_year | datetime1           | datetime1_year | timestamp1                    | timestamp1_year | date3      | date3_year |
      +------------+------------+---------------------+----------------+-------------------------------+-----------------+------------+------------+
      | 2021-11-29 | 2021       | 2021-11-29 00:01:00 | 2021           | 2021-01-11 00:00:00.123456789 | 2021            | 2021-11-20 | 2021       |
      | 2021-11-28 | 2021       | 2021-11-28 00:02:00 | 2021           | 2021-02-11 00:00:00.123456789 | 2021            | 2021-11-21 | 2021       |
      | 2021-11-27 | 2021       | 2021-11-27 00:03:00 | 2021           | 2021-03-11 00:00:00.123456789 | 2021            | 2021-11-22 | 2021       |
      | 2021-11-26 | 2021       | 2021-11-26 00:04:00 | 2021           | 2021-04-11 00:00:00.123456789 | 2021            | 2021-11-23 | 2021       |
      | 2021-11-25 | 2021       | 2021-11-25 00:05:00 | 2021           | 2021-05-11 00:00:00.123456789 | 2021            | 2021-11-24 | 2021       |
      | 2021-11-24 | 2021       | 2021-11-24 00:06:00 | 2021           | 2021-06-11 00:00:00.123456789 | 2021            | 2021-11-25 | 2021       |
      | 2021-11-23 | 2021       | 2021-11-23 00:07:00 | 2021           | 2021-07-11 00:00:00.123456789 | 2021            | 2021-11-26 | 2021       |
      | 2021-11-22 | 2021       | 2021-11-22 00:08:00 | 2021           | 2021-08-11 00:00:00.123456789 | 2021            | 2021-11-27 | 2021       |
      | 2021-11-21 | 2021       | 2021-11-21 00:09:00 | 2021           | 2021-09-11 00:00:00.123456789 | 2021            | 2021-11-28 | 2021       |
      | 2021-11-20 | 2021       | 2021-11-20 00:10:00 | 2021           | 2021-10-11 00:00:00.123456789 | 2021            | 2021-11-29 | 2021       |
      +------------+------------+---------------------+----------------+-------------------------------+-----------------+------------+------------+

相關文檔