返回日期date所在年的第几周,并支持通过datepart参数指定一周的起始时间。
命令格式
BIGINT|INT WEEKOFYEAR (STRING|DATETIME|DATE|TIMESTAMP|TIMESATMP_NTZ <date> [,STRING <datepart>])
参数说明
date:必填。STRING、DATETIME、DATE、TIMESTAMP或TIMESTAMP_NTZ类型日期值。STRING类型日期值格式为
yyyy-mm-dd hh:mi:ss
,在Hive兼容数据模式下支持日期格式yyyy-mm-dd
。datepart:选填。STRING类型。支持取值
isoweek
或week(weekday)
。isoweek
采用ISO 8601 所规定的周边界。ISO周从周一开始算起。week(weekday)
从指定的星期几(weekday)开始算起。weekday的有效值为:周日(SUNDAY)、周一(MONDAY)、周二(TUESDAY)、周三(WEDNESDAY)、周四(THURSDAY)、周五(FRIDAY)以及周六(SATURDAY)。
说明当未通过datepart指定周的起始时间时,系统判断规则如下:
默认周一作为一周的第一天。
判断当年的1月1日是上一年最后一周还是这一年第一周,取决于这一周的大多数日期(4天及以上)在哪一年。
返回值说明
返回BIGINT或INT类型。返回规则如下:
输入日期值为DATETIME类型时,返回BIGINT类型。
输入日期值为STRING类型时,Hive兼容数据类型版本会返回INT类型,非Hive兼容模式下返回BIGINT类型。
输入日期值为DATE、TIMESTAMP或TIMESTAMP_NTZ类型时,返回INT类型。
输入日期值非STRING、DATETIME、DATE、TIMESTAMP或TIMESTAMP_NTZ类型时,返回报错。
STRING类型日期值格式不符合要求时,返回NULL。
输入的日期值为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"));
-- 返回 14。
SELECT WEEKOFYEAR(DATE '2025-03-31');
-- 返回 13。
SELECT WEEKOFYEAR(DATE '2025-03-31','week(monday)');
-- 返回 2。
SELECT WEEKOFYEAR(DATE '2025-01-06','isoweek');
-- 返回 1。
SELECT WEEKOFYEAR(DATETIME '2025-01-05 10:32:00');
-- 返回 0。
SELECT WEEKOFYEAR(DATETIME '2025-01-05 10:32:00','week(monday)');
-- 返回 13。
SELECT WEEKOFYEAR(DATETIME '2025-03-31 10:32:00','week(sunday)');
-- 返回 27。
SELECT WEEKOFYEAR("2025-07-01 12:30:15");
-- 返回 30。
SELECT WEEKOFYEAR(TIMESTAMP "2025-07-21 00:30:15.123");
-- 返回 29。
SELECT WEEKOFYEAR(TIMESTAMP_NTZ "2025-07-21 00:30:15.123","week(friday)");
-- 返回 NULL。
SELECT WEEKOFYEAR('20141231');
-- 返回 NULL。
SELECT WEEKOFYEAR(NULL);
相关函数
WEEKOFYEAR函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数。