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函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数。
该文章对您有帮助吗?