将一年中的数字星期转换为 hiveql 中的日期 (yyyy-mm-dd)
Posted
技术标签:
【中文标题】将一年中的数字星期转换为 hiveql 中的日期 (yyyy-mm-dd)【英文标题】:convert numeric week of year to a date (yyyy-mm-dd) in hiveql 【发布时间】:2020-10-21 22:09:34 【问题描述】:从 hiveql 中的日期中提取周值很容易:
select date_format('2020-10-18','w');
是否有反转此过程的功能:在提供年份和周数时提取结束日期?
【问题讨论】:
【参考方案1】:要获得准确的日期,您还需要提供工作日以及一年中的年份和周数。
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
如果是这样,您可以通过从 unix_timestamp 中减去 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');
返回:
43 2020-10-18
更新:令人惊讶的是,如果不提供一周中的某一天,只提供年份和周数,它也可以默认将星期日计算为工作日,但对于其他日期则不正确2020-01-20,它会在2020-01-18相同的星期日返回,请自行检查:
select date_format('2020-10-18','w'), from_unixtime(unix_timestamp('2020, 43', 'yyyy, w'), 'yyyy-MM-dd');
返回:
43 2020-10-18
因此,如果您一周中没有一天并且不需要绝对准确的日期,那么使用
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;
【讨论】:
以上是关于将一年中的数字星期转换为 hiveql 中的日期 (yyyy-mm-dd)的主要内容,如果未能解决你的问题,请参考以下文章