将一年中的数字星期转换为 hiveql 中的日期 (yyyy-mm-dd)
convert numeric week of year to a date (yyyy-mm-dd) in hiveql
在 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');
Returns:
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');
returns
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');
Returns:
43 2020-10-18
更新: 令人惊讶的是,如果不提供一周中的某一天,仅提供年份和周数,它也可以默认将星期日计为工作日,但它是不正确的对于其他日期,例如 2020-01-20,它将 return 同一个星期日 2020-01-18,请自行检查:
select date_format('2020-10-18','w'), from_unixtime(unix_timestamp('2020, 43', 'yyyy, w'), 'yyyy-MM-dd');
returns:
43 2020-10-18
因此,如果您一周中没有一天并且不需要绝对准确的日期,那么请使用
from_unixtime(unix_timestamp('2020, 43', 'yyyy, w'), 'yyyy-MM-dd');
或者像这样(年份和周数从table中选择):
select from_unixtime(unix_timestamp(concat(col_year, ', ', col_week), 'yyyy, w'), 'yyyy-MM-dd') from your_table;
在 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');
Returns:
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');
returns
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');
Returns:
43 2020-10-18
更新: 令人惊讶的是,如果不提供一周中的某一天,仅提供年份和周数,它也可以默认将星期日计为工作日,但它是不正确的对于其他日期,例如 2020-01-20,它将 return 同一个星期日 2020-01-18,请自行检查:
select date_format('2020-10-18','w'), from_unixtime(unix_timestamp('2020, 43', 'yyyy, w'), 'yyyy-MM-dd');
returns:
43 2020-10-18
因此,如果您一周中没有一天并且不需要绝对准确的日期,那么请使用
from_unixtime(unix_timestamp('2020, 43', 'yyyy, w'), 'yyyy-MM-dd');
或者像这样(年份和周数从table中选择):
select from_unixtime(unix_timestamp(concat(col_year, ', ', col_week), 'yyyy, w'), 'yyyy-MM-dd') from your_table;