在hiveql中将数字周转换为日期(yyyy-mm-dd)

pprl5pva  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(414)

从hiveql中的日期提取周值非常简单:

select date_format('2020-10-18','w');

有没有一个函数可以反转这个过程:在提供年和周数时提取结束日期?

slhcrj9b

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时间戳:

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;

相关问题