将日期转换为ISO周日期

问题描述 投票:1回答:1

如何在Impala SQL中将日期转换为ISO week date

例如,ISO周日期日历中的2019-12-30将写为2020-W01-12020W011

答案:

标记为戈登·利诺夫(Gordon Linoff)的答案是正确的,因为它解决了问题的关键部分,即推导出ISO周日期的年份部分。

对于ISO周日期的星期部分,有一个就绪功能,并且ISO周日期的日部分可以很容易地从星期日起始周转换为星期一起始周。

下面的查询包含从星期一到星期日的所有星期几:

select datecol, 
       concat(cast(iso_year as string),'-W',lpad(cast(iso_week as string),2,'0'),'-',cast(iso_day as string)) as iso_Year_week_date_long,
       concat(cast(iso_year as string),'W',lpad(cast(iso_week as string),2,'0'),cast(iso_day as string)) as iso_Year_week_date_short
  from (
SELECT datecol, 
       (case when weekofyear(datecol) = 1 and
                  date_part('year',datecol) <> date_part('year',adddate(datecol,+7))
             then date_part('year',datecol) + 1
             when weekofyear(datecol) in (52, 53) and
                  date_part('year',datecol) <> date_part('year',adddate(datecol,-7))
             then date_part('year',datecol) - 1
             else date_part('year',datecol)
         end) as iso_year,
       weekofyear(datecol) as iso_week,
       1+mod(dayofweek(datecol)+5,7) as iso_day
  from (
  select '2021-12-31' as datecol union
  select '2020-12-31' as datecol union
  select '2019-12-31' as datecol union
  select '2018-12-31' as datecol union
  select '2017-12-31' as datecol union
  select '2016-12-31' as datecol union
  select '2015-12-31' as datecol union
  select '2014-12-31' as datecol union
  select '2013-12-31' as datecol union
  select '2012-12-31' as datecol union
  select '2022-01-01' as datecol union
  select '2021-01-01' as datecol union
  select '2020-01-01' as datecol union
  select '2019-01-01' as datecol union
  select '2018-01-01' as datecol union
  select '2017-01-01' as datecol union
  select '2016-01-01' as datecol union
  select '2015-01-01' as datecol union
  select '2014-01-01' as datecol union
  select '2013-01-01' as datecol
 ) as t1
  ) as t2
order by datecol;

并显示1月1日如何属于

  • 新年,如果1月1日是一周的1号,2号,3号或4号,即包含1月1日的一周中至少有4个新年日
  • 旧年份,如果1月1日是一周中的第5、6或7天,即,包含1月1日的一周中有3个或更少的新年,则>
datecol   |iso_year_week_date_long|iso_year_week_date_short|
----------|-----------------------|------------------------|
2014-12-31|2015-W01-3             |2015W013                |
2015-01-01|2015-W01-4             |2015W014                |
2015-12-31|2015-W53-4             |2015W534                |
2016-01-01|2015-W53-5             |2015W535                |
2016-12-31|2016-W52-6             |2016W526                |
2017-01-01|2016-W52-7             |2016W527                |
2017-12-31|2017-W52-7             |2017W527                |
2018-01-01|2018-W01-1             |2018W011                |
2018-12-31|2019-W01-1             |2019W011                |
2019-01-01|2019-W01-2             |2019W012                |
2019-12-31|2020-W01-2             |2020W012                |
2020-01-01|2020-W01-3             |2020W013                |
2020-12-31|2020-W53-4             |2020W534                |
2021-01-01|2020-W53-5             |2020W535                |

如何在Impala SQL中将日期转换为ISO周日期?例如,ISO周日期日历中的2019-12-30将写为2020-W01-1或2020W011答案:将Gordon Linoff答案标记为正确,...

sql date impala week-number
1个回答
1
投票

I 思考

© www.soinside.com 2019 - 2024. All rights reserved.