在PostgreSQL中,选择会计年度月份格式作为日期列

时间:2019-10-03 19:05:14

标签: sql postgresql business-intelligence

我有一个Postgres数据库,其中有一个事件发生月份的列。其格式设置为TEXT列类型,并且会计年度位于月份名称的前面,如下所示:

fiscal
-------
20-Jul
20-Aug
20-Jan
20-Apr
20-Feb

假设这种情况下的会计年度始于2019年4月(指2019-2020会计年度),那么选择查询将如何将其显示为DATE列类型? (假设仅使用该月的第一天作为一天)

就像下面的

fiscal    real_date
--------------------
20-Jul    2019-Jul-1
20-Aug    2019-Aug-1
20-Jan    2020-Jan-1
20-Apr    2019-Apr-1
20-Feb    2020-Feb-1

3 个答案:

答案 0 :(得分:1)

这看起来很可怕,但到目前为止似乎仍然有效...

select

case when extract('month' from (to_date(<your column>,'yy-mon'))) > 4
  then (to_date(<your column>,'yy-mon')) + interval '-1' year
else (to_date(<your column>,'yy-mon'))
              end
from
<your table>

Fiddle example

答案 1 :(得分:1)

我认为这可以实现您想要的逻辑:

select (case when extract(month from to_date(substr(fm, 4, 3), 'MON')) >= 4
             then to_date('20' || fm, 'YYYY-MON')
             else to_date('20' || fm, 'YYYY-MON') + interval '1 year'
        end)
from (values ('20-JUL'), ('19-FEB')) v(fm);

Postgres允许您将月份转换为日期。您获得的价值回溯至远古时代。但是我不认为有任何问题,因为目的只是要将字符串转换为数字。

答案 2 :(得分:0)

从您可以使用的字符串中获取日期

 to_date('20-Jul','YY-Mon')

例如:

select to_date(fiscal,'YY-Mon')