将一年中的数字星期转换为 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)的主要内容,如果未能解决你的问题,请参考以下文章

将一年中的某一天转换为某些日期格式具有 DDYYYY 并且某些日期格式具有 DDDYYYY 在 oracle 中的日期

将一年中的几周转换为日期

Java常用日期时间格式化转换符

将一列日期数字转换为缩写月份

Java中常用日期操作及方法

如何将UTC秒数转换为日期,100分,在线等