从hiveql中的日期提取周值非常简单:
select date_format('2020-10-18','w');
有没有一个函数可以反转这个过程:在提供年和周数时提取结束日期?
slhcrj9b1#
为了得到准确的日期,你还需要提供一年中的星期日、年份和星期数。
select date_format('2020-10-18','w'), from_unixtime(unix_timestamp('2020, 43, 7', 'yyyy, w, u'), 'yyyy-MM-dd');
退货:
43 2020-10-18
看起来一年中的周数是从星期天开始计算的,而一周中的日数是从星期一开始计算的,因为星期一是第19天:
select date_format('2020-10-18','w u'), from_unixtime(unix_timestamp('2020, 43, 1', 'yyyy, w, u'), 'yyyy-MM-dd');
退货
43 2020-10-19
如果这是真的,你可以通过减去 60*60*24 从unix\u时间戳:
60*60*24
select date_format('2020-10-18','w'), from_unixtime(unix_timestamp('2020, 43, 1', 'yyyy, w, u')-60*60*24, 'yyyy-MM-dd');
更新:令人惊讶的是,如果不提供一周中的某一天,仅提供年和周数,则默认情况下也可以将星期日计算为周日,但对于其他日期(例如2020-01-20)将不正确,它将返回相同的星期日2020-01-18,请自己检查:
select date_format('2020-10-18','w'), from_unixtime(unix_timestamp('2020, 43', 'yyyy, w'), 'yyyy-MM-dd');
所以,如果你一周中没有一天,也不需要绝对准确的日期,那么就使用
from_unixtime(unix_timestamp('2020, 43', 'yyyy, w'), 'yyyy-MM-dd');
或类似于此(从表中选择年份和周数):
select from_unixtime(unix_timestamp(concat(col_year, ', ', col_week), 'yyyy, w'), 'yyyy-MM-dd') from your_table;
1条答案
按热度按时间slhcrj9b1#
为了得到准确的日期,你还需要提供一年中的星期日、年份和星期数。
退货:
看起来一年中的周数是从星期天开始计算的,而一周中的日数是从星期一开始计算的,因为星期一是第19天:
退货
如果这是真的,你可以通过减去
60*60*24
从unix\u时间戳:退货:
更新:令人惊讶的是,如果不提供一周中的某一天,仅提供年和周数,则默认情况下也可以将星期日计算为周日,但对于其他日期(例如2020-01-20)将不正确,它将返回相同的星期日2020-01-18,请自己检查:
退货:
所以,如果你一周中没有一天,也不需要绝对准确的日期,那么就使用
或类似于此(从表中选择年份和周数):