我想得到一组日期的元组。
在impala sql中,有一个函数 weekofyear
给出了正确的周数:
select year('2018-12-31'), weekofyear('2018-12-31')
year('2018-12-31')|weekofyear('2018-12-31')|
------------------|------------------------|
2018| 1|
但是功能 year
如果要以字符串格式“yyywwk”订购(年、周数)元组,则不起作用。
有没有一个简洁的方法来为每个日期获得“yyyywk”?日期 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
?
2条答案
按热度按时间tsm1rwdh1#
如果这只是一个
order by
问题,那么我推测您有某种聚合查询。如果是,您可以使用:这将正确排序整个查询。
也就是说,如果你想在一周前获得信息,那么就使用
date_trunc()
而不是提取年份和周:pod7payv2#
可以在中使用列别名
order by
条款作为两者
year()
以及weekofyear()
函数返回integer
价值观。在group by、having和order by子句的顶层允许使用别名,例如文档中的group by别名