генерировать дату из нескольких столбцов - PullRequest
4 голосов
/ 19 мая 2011

У меня есть (Postgre) SQL-таблица, в которой даты хранятся следующим образом

YEAR    B-MONTH    E-MONTH
2000      01         05
2004      03         06
2010      07         12
2004      01         12

Как я могу превратить их в «реальные» поля даты?Я бы хотел, чтобы результат выглядел так:

  BEGIN          END
2000-01-01    2000-05-31
2004-03-01    2004-06-30
2010-07-01    2010-12-31
2004-01-01    2004-12-31

Заранее спасибо!

[решение]

Это решениеЯ закончил с:

начало

TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("B-MONTH", 'FM00') || '01', 'YYYYMMDD') AS BEGIN

конец

CAST(TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("E-MONTH", 'FM00') || '01', 'YYYYMMDD') + INTERVAL ('1 MONTH - 1 DAY') AS DATE) AS END

[править]

Это также работает так:

begin

TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("B-MONTH", 'FM00'), 'YYYYMM') AS BEGIN

end

CAST(TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("E-MONTH", 'FM00'), 'YYYYMM') + INTERVAL ('1 MONTH - 1 DAY') AS DATE) AS END

1 Ответ

6 голосов
/ 19 мая 2011

сначала нужно преобразовать целочисленные значения в char, а затем в дату, например:

to_date(to_char(b_month, '00') || to_char(YEAR,'9999'), 'MMYYYY') as START_DATE

для второго столбца, который возвращает конец даты, не уверен в POSTGRESQL, если существует существующая функция для возвратапоследний день месяца как функция ORACLE LAST_DAY, так что вот пример под Oracle:

last_day(to_date(to_char(e_month, '00') || to_char(YEAR,'9999'), 'MMYYYY')) as END_DATE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...