如何使用 SQL 而不使用 case 语句从日期列中提取会计月份编号
How do I extract fiscal month number from a date column using SQL and without using case statements
目前我正在使用如下案例语句提取月份数字
WHEN cast(estimated_arrival_datetime as date) >= cast('2019-12-29' as date) AND cast(estimated_arrival_datetime as date) <= cast('2020-02-01' as date) THEN 1
WHEN cast(estimated_arrival_datetime as date) >= cast('2020-02-02' as date) AND cast(estimated_arrival_datetime as date) <= cast('2020-02-29' as date) THEN 2
WHEN cast(estimated_arrival_datetime as date) >= cast('2020-03-01' as date) AND cast(estimated_arrival_datetime as date) <= cast('2020-03-28' as date) THEN 3
WHEN cast(estimated_arrival_datetime as date) >= cast('2020-03-29' as date) AND cast(estimated_arrival_datetime as date) <= cast('2020-05-02' as date) THEN 4
WHEN cast(estimated_arrival_datetime as date) >= cast('2020-05-03' as date) AND cast(estimated_arrival_datetime as date) <= cast('2020-05-30' as date) THEN 5
但是有没有更好的方法来提取月份数字,而且日期列也将包含 2021 年的数据
编辑:使用 Redshift
不幸的是,Redshift 似乎不直接支持 ISO 月份。您可以从 ISO 周数转换:
(case when to_char(estimated_arrival_datetime, 'IW') <= '04' then 1
when to_char(estimated_arrival_datetime, 'IW') <= '08' then 2
when to_char(estimated_arrival_datetime, 'IW') <= '13' then 3
when to_char(estimated_arrival_datetime, 'IW') <= '17' then 4
when to_char(estimated_arrival_datetime, 'IW') <= '21' then 5
when to_char(estimated_arrival_datetime, 'IW') <= '26' then 6
when to_char(estimated_arrival_datetime, 'IW') <= '30' then 7
when to_char(estimated_arrival_datetime, 'IW') <= '34' then 8
when to_char(estimated_arrival_datetime, 'IW') <= '39' then 9
when to_char(estimated_arrival_datetime, 'IW') <= '43' then 10
when to_char(estimated_arrival_datetime, 'IW') <= '47' then 11
else 12
end)
这应该适用于任何一年。
目前我正在使用如下案例语句提取月份数字
WHEN cast(estimated_arrival_datetime as date) >= cast('2019-12-29' as date) AND cast(estimated_arrival_datetime as date) <= cast('2020-02-01' as date) THEN 1
WHEN cast(estimated_arrival_datetime as date) >= cast('2020-02-02' as date) AND cast(estimated_arrival_datetime as date) <= cast('2020-02-29' as date) THEN 2
WHEN cast(estimated_arrival_datetime as date) >= cast('2020-03-01' as date) AND cast(estimated_arrival_datetime as date) <= cast('2020-03-28' as date) THEN 3
WHEN cast(estimated_arrival_datetime as date) >= cast('2020-03-29' as date) AND cast(estimated_arrival_datetime as date) <= cast('2020-05-02' as date) THEN 4
WHEN cast(estimated_arrival_datetime as date) >= cast('2020-05-03' as date) AND cast(estimated_arrival_datetime as date) <= cast('2020-05-30' as date) THEN 5
但是有没有更好的方法来提取月份数字,而且日期列也将包含 2021 年的数据
编辑:使用 Redshift
不幸的是,Redshift 似乎不直接支持 ISO 月份。您可以从 ISO 周数转换:
(case when to_char(estimated_arrival_datetime, 'IW') <= '04' then 1
when to_char(estimated_arrival_datetime, 'IW') <= '08' then 2
when to_char(estimated_arrival_datetime, 'IW') <= '13' then 3
when to_char(estimated_arrival_datetime, 'IW') <= '17' then 4
when to_char(estimated_arrival_datetime, 'IW') <= '21' then 5
when to_char(estimated_arrival_datetime, 'IW') <= '26' then 6
when to_char(estimated_arrival_datetime, 'IW') <= '30' then 7
when to_char(estimated_arrival_datetime, 'IW') <= '34' then 8
when to_char(estimated_arrival_datetime, 'IW') <= '39' then 9
when to_char(estimated_arrival_datetime, 'IW') <= '43' then 10
when to_char(estimated_arrival_datetime, 'IW') <= '47' then 11
else 12
end)
这应该适用于任何一年。