在 PostgreSQL 中,select 会计年度月份格式作为日期列
In PostgreSQL, select fiscal year month format as a date column
我有一个 Postgres 数据库,其中有一列表示事件发生的月份。它的格式为 TEXT 列类型,并且在月份名称之前有财政年度,如下所示:
fiscal
-------
20-Jul
20-Aug
20-Jan
20-Apr
20-Feb
假设本例中的财政从 2019 年 4 月开始(指的是 2019-2020 财政年度),select 查询如何将其显示为 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
这看起来很糟糕,但到目前为止似乎还有效...
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>
我认为这实现了你想要的逻辑:
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 恰好允许您将月份转换为日期。您可以及时获得价值。但我认为没有任何问题,因为目的只是将字符串转换为数字。
我有一个 Postgres 数据库,其中有一列表示事件发生的月份。它的格式为 TEXT 列类型,并且在月份名称之前有财政年度,如下所示:
fiscal
-------
20-Jul
20-Aug
20-Jan
20-Apr
20-Feb
假设本例中的财政从 2019 年 4 月开始(指的是 2019-2020 财政年度),select 查询如何将其显示为 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
这看起来很糟糕,但到目前为止似乎还有效...
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>
我认为这实现了你想要的逻辑:
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 恰好允许您将月份转换为日期。您可以及时获得价值。但我认为没有任何问题,因为目的只是将字符串转换为数字。