Я хотел бы получить (год номера недели, номер недели) для набора дат.
В Impala SQL есть функция weekofyear
, которая дает правильный номер недели:
select year('2018-12-31'), weekofyear('2018-12-31')
year('2018-12-31')|weekofyear('2018-12-31')|
------------------|------------------------|
2018| 1|
Но функция year
не работает, если вы хотите заказать (год, номер недели) кортежи в строковом формате 'yyyyWwk'.
Есть ли удобный способ получить '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|
Как получить "неделю-год" = 2019
на дату 2018-12-31
?