WEEKOFYEAR

返回日期date所在年的第几周,并支持通过datepart参数指定一周的起始时间。

命令格式

BIGINT|INT WEEKOFYEAR (STRING|DATETIME|DATE|TIMESTAMP|TIMESATMP_NTZ <date> [,STRING <datepart>])

参数说明

  • date:必填。STRING、DATETIME、DATE、TIMESTAMPTIMESTAMP_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指定周的起始时间时,系统判断规则如下:

    • 默认周一作为一周的第一天。

    • 判断当年的11日是上一年最后一周还是这一年第一周,取决于这一周的大多数日期(4天及以上)在哪一年。

返回值说明

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

  • 输入日期值为DATETIME类型时,返回BIGINT类型。

  • 输入日期值为STRING类型时,Hive兼容数据类型版本会返回INT类型,非Hive兼容模式下返回BIGINT类型。

  • 输入日期值为DATE、TIMESTAMPTIMESTAMP_NTZ类型时,返回INT类型。

  • 输入日期值非STRING、DATETIME、DATE、TIMESTAMPTIMESTAMP_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函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数