全部產品
Search
文件中心

IoT Platform:日期與時間函數

更新時間:Jun 30, 2024

SQL分析提供了常見的日期函數,您可以根據實際需要選擇合適的日期函數,完成日期計算、日期轉換。本文為您提供SQL分析支援的日期函數的命令格式、參數說明及樣本,指導您使用日期函數完成開發。

函數

功能

ADD_MONTHS

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

CURRENT_TIMESTAMP

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

DATE_ADD

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

DATE_SUB

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

DAY

返回日期值的天。

DAYOFMONTH

返回日期中日的值。

DAYOFWEEK

返回日期的星期值。

DAYOFYEAR

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

EXTRACT

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

FROM_UNIXTIME

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

GETDATE

擷取當前系統時間。

HOUR

返回日期小時部分的值。

INTERVAL_DAY_TIME

將STRING類型日期值轉換為INTERVAL_DAY_TIME類型變數。

ISDATE

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

LAST_DAY

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

LASTDAY

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

MINUTE

返回日期分鐘部分的值。

MONTH

返回日期值所屬月份。

MONTHS_BETWEEN

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

NEXT_DAY

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

NOW

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

QUARTER

返回日期值所屬季度。

SECOND

返回日期秒數部分的值。

TO_CHAR

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

TO_DATE

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

UNIX_TIMESTAMP

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

WEEKDAY

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

WEEKOFYEAR

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

YEAR

返回日期值的年。

ADD_MONTHS

  • 命令格式

    string add_months(date|datetime|timestamp|string <startdate>, int <num_months>)
  • 命令說明

    返回開始日期startdate增加num_months個月後的日期。

  • 參數說明

    • 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);

CURRENT_TIMESTAMP

  • 命令格式

    timestamp current_timestamp()
  • 命令說明

    返回當前TIMESTAMP類型的時間戳記,值不固定。

  • 傳回值說明

    返回TIMESTAMP類型。

  • 樣本

    select current_timestamp(); 

DATE_ADD

  • 命令格式

    date date_add(date|timestamp|string <startdate>, bigint <delta>)
  • 命令說明

    按照delta幅度增減startdate日期的天數。如果您需要擷取在目前時間基礎上指定變動幅度的日期,請結合GETDATE函數使用。

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

  • 參數說明

    • startdate:必填。起始日期值。支援DATE、DATETIME或STRING類型。

      如果參數為STRING類型,則會隱式轉換為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。 
    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);

DATE_SUB

  • 命令格式

    date date_sub(date|timestamp|string <startdate>, bigint <delta>)
  • 命令說明

    按照delta幅度增減startdate日期的天數。如果您需要擷取在目前時間基礎上指定變動幅度的日期,請結合GETDATE函數使用。

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

  • 參數說明

    • startdate:必填。起始日期值。支援DATE、DATETIME或STRING類型。

      如果參數為STRING類型,則會隱式轉換為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-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天。 
    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);

DAY

  • 命令格式

    int day(datetime|timestamp|date|string <date>)
  • 命令說明

    返回一個日期的天。

  • 參數說明

    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);

DAYOFMONTH

  • 命令格式

    int dayofmonth(datetime|timestamp|date|string <date>)
  • 命令說明

    返回日期中日的值。

  • 參數說明

    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);

DAYOFWEEK

  • 命令格式

    int dayofweek(datetime|timestamp|date|string <date>)
  • 命令說明

    返回日期的星期值。

  • 參數說明

    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>)
  • 命令說明

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

  • 參數說明

    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的部分。

  • 參數說明

    • datepart:必填。支援YEAR、MONTH、DAY、HOUR或MINUTE等時間取值。

    • 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等時間取值時,返回報錯。

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

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

  • 樣本

  • 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);

FROM_UNIXTIME

  • 命令格式

    datetime from_unixtime(bigint <unixtime>)
  • 命令說明

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

  • 參數說明

    unixtime:必填。BIGINT類型,秒數,UNIX格式的日期時間值。如果輸入為STRING、DOUBLE或DECIMAL類型,則會隱式轉換為BIGINT後參與運算。

  • 傳回值說明

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

    說明

    Hive相容模式下(set odps.sql.hive.compatible=true;),如果輸入參數是STRING類型,傳回值也是STRING類型。

  • 樣本

  • --返回1973-11-30 05:33:09。
    select from_unixtime(123456789);

GETDATE

  • 命令格式

    datetime getdate()
  • 命令說明

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

  • 傳回值說明

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

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且不含多餘的字串。

  • 傳回值說明

    返回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);

INTERVAL_DAY_TIME

  • 命令格式

    interval_day_time(string <date>)
  • 命令說明

    將給定日期date轉換為INTERVAL_DAY_TIME類型的變數。

  • 參數說明

    date:必填。STRING類型日期值。格式為dd hh:mi:ss.ff3,至少需要包含dd hh:mm,否則會報錯。

  • 傳回值說明

    返回INTERVAL_DAY_TIME類型。如果輸入參數為NULL,則返回NULL。

  • 樣本

    --返回1 00:00:00.000000000。
    select interval_day_time("01 00:00:00");
    
    --返回1 11:22:00.000000000。
    select interval_day_time("01 11:22");
    
    --返回12 01:02:03.999000000。
    select interval_day_time("12 01:02:03.999");

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。
    select isdate(1678952314,'yyyy-mm-dd');

LAST_DAY

  • 命令格式

    string last_day(date|datetime|timestamp|string <date>)
  • 命令說明

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

  • 參數說明

    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');

LASTDAY

  • 命令格式

    datetime lastday(datetime <date>)
  • 命令說明

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

  • 參數說明

    date:DATETIME類型日期值,格式為yyyy-mm-dd hh:mi:ss

  • 傳回值說明

    返回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。
    select lastday ('2013-06-08 01:10:00');
    
    --返回NULL。
    select lastday (null);

MINUTE

  • 命令格式

    int minute(datetime|timestamp|string <date>)
  • 命令說明

    返回日期分鐘部分的值。

  • 參數說明

    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);

MONTH

  • 命令格式

    int month(datetime|timestamp|date|string <date>)
  • 命令說明

    返回一個日期的月份。

  • 參數說明

    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);

MONTHS_BETWEEN

  • 命令格式

    double months_between(datetime|timestamp|date|string <date1>, datetime|timestamp|date|string <date2>)
  • 命令說明

    返回日期date1date2之間的月數。

  • 參數說明

    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);

NEXT_DAY

  • 命令格式

    string next_day(timestamp|date|datetime|string <startdate>, string <week>)
  • 命令說明

    返回大於指定日期startdate並且與week相匹配的第一個日期,即下周幾的具體日期。

  • 參數說明

    • 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);

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:mm:ss.SSS') ;

      返回結果如下:

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

QUARTER

  • 命令格式

    int quarter (datetime|timestamp|date|string <date>)
  • 命令說明

    返回一個日期的季度,範圍是1~4。

  • 參數說明

    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);

SECOND

  • 命令格式

    int second(datetime|timestamp|string <date>)
  • 命令說明

    返回日期秒數部分的值。

  • 參數說明

    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);

TO_CHAR

  • 命令格式

    string to_char(datetime <date>, string <format>)
  • 命令說明

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

  • 參數說明

    • date:必填。DATETIME類型日期值,格式為yyyy-mm-dd hh:mi:ss。如果輸入為STRING類型,會隱式轉換為DATETIME類型後參與運算。

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

  • 傳回值說明

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

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

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

    • format值為NULL時,返回NULL。

  • 樣本

  • --返回20080718。
    select to_char(datetime'2008-07-18 00:00:00', 'yyyymmdd');
    
    --返回20080718。
    select to_char('2008-07-18 00:00:00', 'yyyymmdd');
    
    --'阿里巴巴2010-12*3'無法轉換為符合要求的格式,會引發異常,應該為'阿里巴巴2010-12*03'。
    select to_char(datetime'阿里巴巴2010-12*3', '阿里巴巴yyyy-mm*dd');
    
    --'20102401'不是標準日期值,引發異常,應該為'2010-01-24 00:00:00'。
    select to_char(datetime'20102401', 'yyyy');
    
    --'2008718'不是標準日期值,引發異常,應該為'2008-07-18 00:00:00'。
    select to_char(datetime'2008718', 'yyyymmdd');
    
    --返回NULL。
    select to_char(datetime'2010-12-03 00:00:00', null);

TO_DATE

  • 命令格式

    datetime to_date(string <date>, string <format>)
  • 命令說明

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

  • 參數說明

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

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

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

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

  • 傳回值說明

    返回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');
    
    --返回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');

UNIX_TIMESTAMP

  • 命令格式

    bigint unix_timestamp(datetime|date|timestamp|string <date>)
  • 命令說明

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

  • 參數說明

    date:必填。DATETIME、DATE、TIMESTAMP或STRING類型日期值,格式為yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3。如果輸入為STRING類型,則會隱式轉換為DATETIME類型後參與運算。當開啟新資料類型屬性時,隱式轉換會失敗,此時需要通過cast函數轉換或關閉新資料類型,例如unix_timestamp(cast(... as datetime))

  • 傳回值說明

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

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

    • date值為NULL時,返回NULL。

  • 樣本

  • --返回1237518660。
    select unix_timestamp(datetime'2009-03-20 11:11:00'); 
    
    --返回1237518660。
    select unix_timestamp('2009-03-20 11:11:00'); 
    
    --返回NULL。
    select unix_timestamp(null);

WEEKDAY

  • 命令格式

    bigint weekday (datetime <date>)
  • 命令說明

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

  • 參數說明

    date:必填。DATETIME類型日期值。格式為yyyy-mm-dd hh:mi:ss。如果輸入為STRING類型,則會隱式轉換為DATETIME類型後參與運算。

  • 傳回值說明

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

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

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

    • date值為NULL時,返回NULL。

  • 樣本

  • --返回4。
    select weekday (datetime '2009-03-20 11:11:00');
    
    --返回4。
    select weekday ('2009-03-20 11:11:00');
    
    --返回NULL。
    select weekday (null);

WEEKOFYEAR

  • 命令格式

    bigint weekofyear (datetime <date>)
  • 命令說明

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

    說明

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

  • 參數說明

    date:必填。DATETIME類型日期值。格式為yyyy-mm-dd hh:mi:ss。如果輸入為STRING類型,則會隱式轉換為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。
    select weekofyear('2021-11-29 00:01:00');
    
    --返回NULL。
    select weekofyear('20141231');
    
    --返回NULL。
    select weekofyear(null);

YEAR

  • 命令格式

    int year(datetime|timestamp|date|string <date>)
  • 命令說明

    返回日期date的年。

  • 參數說明

    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);