DATEPART

更新时间:
复制 MD 格式

DATEPART函数用于从指定日期date中提取符合指定时间单位date_part的整数值。

命令格式

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

-- 标准示例。
-- 返回2025。
SELECT DATEPART(DATETIME '2025-03-12 14:22:00', 'yyyy');

参数说明

  • date:必填。日期值。DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ类型。

    在MaxCompute1.0数据类型版本下,输入参数可以为STRING类型,时间格式需符合DATETIME类型,即yyyy-mm-dd hh:mi:ss,例如2025-07-21 00:00:00,会隐式转换为DATETIME类型后参与运算。

  • date_part:必填。指定时间单位。STRING类型常量。该字段支持如下取值: 

    时间单位

    取值

    年

    year或yyyy

    月

    month或mon或mm

    日

    day或dd

    小时

    hour或hh

    分钟

    mi

    秒

    ss

    毫秒

    ff3

返回值说明

返回BIGINT类型。返回规则如下:

  • date非DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ类型时,返回报错。

  • date值为NULL时,返回报错。

  • date_part值为NULL时,返回NULL。

  • date_part为非常量、不支持的格式或其他类型时,返回报错。

使用示例

示例1:基本示例

  • 基础时间单位提取(年、月、日、小时)。

    -- 设置数据类型版本为2.0。
    SET odps.sql.type.system.odps2 = true;
    
    -- 提取日期的年份(yyyy)。
    -- 返回2025。
    SELECT DATEPART(DATETIME '2025-06-08 01:10:00', 'yyyy');
    
    -- 提取日期的月份(mm)。
    -- 返回6。
    SELECT DATEPART(DATETIME '2025-06-08 01:10:00', 'mm');
    
    -- 提取日期的日(dd)。
    -- 返回8。
    SELECT DATEPART(DATETIME '2025-06-08 01:10:00', 'dd');
    
    -- 对DATE类型提取年份。
    -- 返回2025。
    SELECT DATEPART(DATE '2025-06-08', 'yyyy');
    
    -- 从TIMESTAMP中提取小时。
    -- 返回1。
    SELECT DATEPART(TIMESTAMP '2025-06-08 01:10:00', 'hour');
  • NULL值输入处理。

    -- date_part参数为NULL,返回NULL。
    SELECT DATEPART(DATE '2025-06-08', NULL);
    
    -- date参数为NULL,返回报错。
    SELECT DATEPART(NULL, 'yyyy');
    
    -- 两个参数均为 NULL,返回报错。
    SELECT DATEPART(NULL, NULL);

示例2:date参数为STRING类型

  • MaxCompute2.0数据类型版本,若date为STRING类型,需要进行类型转换,否则会报错。

    -- 设置数据类型版本为2.0。
    SET odps.sql.type.system.odps2 = true;
    
    -- 返回报错。
    SELECT DATEPART('2025-06-08 01:10:00', 'yyyy');
    
    -- 经过类型转换,返回2025。
    SELECT DATEPART(CAST('2025-06-08 01:10:00' AS datetime), 'yyyy');
  • MaxCompute1.0数据类型版本,若date为STRING类型,且时间格式符合DATETIME类型,则会隐式转换为DATETIME类型后参与运算。

    -- 设置数据类型版本为1.0。
    SET odps.sql.type.system.odps2 = false;
    
    -- 返回2025。
    SELECT DATEPART('2025-06-08 01:10:00', 'yyyy');
    
    -- 返回NULL,输入参数为STRING类型,但不符合DATETIME类型格式。
    SELECT DATEPART('2025-06-08', 'yyyy');

相关函数

DATEPART函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数。