如何解决将一年中的数字周转换为hiveql中的日期yyyy-mm-dd
从hiveql中的日期中提取星期值很容易:
select date_format('2020-10-18','w');
解决方法
要获取准确的日期,您还需要提供星期几以及一年中的年和周号。
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'),1','yyyy-MM-dd');
返回
43 2020-10-19
如果是这样,您可以通过从unix_timestamp中减去60*60*24
来解决它:
select date_format('2020-10-18',u')-60*60*24,'yyyy-MM-dd');
返回:
43 2020-10-18
更新:令人惊讶的是,如果不提供一周中的某一天(仅提供年份和周数),则默认情况下它也可以将星期日计算为一周中的某天,但是对于其他日期而言,这是不正确的2020-01-20,它将返回同一天2020-01-18,请自己检查:
select date_format('2020-10-18',43',w'),'yyyy-MM-dd');
返回:
43 2020-10-18
因此,如果您一周中没有一天并且不需要绝对准确的日期,请使用
from_unixtime(unix_timestamp('2020,'yyyy-MM-dd');
或者这样(从表中选择年和周号):
select from_unixtime(unix_timestamp(concat(col_year,',col_week),'yyyy-MM-dd') from your_table;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。