【发布时间】:2020-07-14 11:06:57
【问题描述】:
我想获取一组日期的(周数,周数)连音。
在 Impala SQL 中,有一个函数 weekofyear 给出正确的周数:
select year('2018-12-31'), weekofyear('2018-12-31')
year('2018-12-31')|weekofyear('2018-12-31')|
------------------|------------------------|
2018| 1|
但如果想要以字符串格式“yyyyWwk”订购(年、周数)连音,则函数year 不起作用。
有没有一种简洁的方法可以为每个日期获取“yyyyWwk”?上面示例中给出的日期2018-12-31 将产生结果2019W01。
这不起作用:
select concat(cast(year(dt) as STRING),'W',lpad(cast(weekofyear(dt) as string),2,"0")) as wk, dt
from (
select '2018-11-30' as dt
union
select '2018-12-31' as dt
union
select '2019-01-31' as dt
) as t
order by 1, 2;
因为它没有正确排列日期:
wk |dt |
-------|----------|
2018W01|2018-12-31|
2018W48|2018-11-30|
2019W05|2019-01-31|
如何获取日期2018-12-31 的“周-年”=2019?
【问题讨论】:
-
dayofyear('2018-12-31')将返回 365,因此您可能可以基于此设计一些逻辑,weekofyear()为 1,将year()结果增加 1。不漂亮但...跨度> -
@mazaneicha 我也在考虑一些复杂的解决方案。 @gordon-linoff 建议的
date_trunc('week', dt)方法似乎是最有希望的一个漂亮的解决方案。 -
这里有个更好的问题:stackoverflow.com/questions/61012874/…
-
根据 ISO,一年的第一周是该周有 4 天(或更多)天的那一周。如果小于4,则认为是上一年的最后一周。
标签: sql impala week-number