В PostgreSQL выберите формат месяца финансового года в качестве столбца даты - PullRequest
0 голосов
/ 03 октября 2019

У меня есть база данных Postgres, в которой есть столбец для месяца, в котором произошло событие. Он отформатирован как тип столбца TEXT и имеет финансовый год, предшествующий названию месяца, как показано ниже:

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

Скажем, бюджет в этом случае начинается в апреле 2019 года (и относится к финансовому году 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 ]

1 голос
/ 03 октября 2019

Это выглядит ужасно, но пока работает ...

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

1 голос
/ 03 октября 2019

Я думаю, что это реализует логику, которую вы хотите:

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 позволяет конвертировать месяц в дату. Вы получаете ценность далеко назад во времени. Но я не думаю, что есть какие-либо проблемы, потому что цель состоит только в том, чтобы преобразовать строку в число.

0 голосов
/ 03 октября 2019

для получения даты из строки, которую вы можете использовать

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

например:

select to_date(fiscal,'YY-Mon') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...