last_day в PostgreSQL

#postgresql

#postgresql

Вопрос:

Функция oracle last_day возвращает последний день месяца. пример:

 nls_date_format='YYYY-MM-DD H24:MI:SS'
select last_day(sysdate) from dual;
LAST_DAY(SYSDATE)
-------------------
2014-06-30 15:45:43
  

oracle также возвращает значение времени.

Я пробовал использовать приведенный ниже sql в PostgreSQL, который возвращает последний день месяца, но значение времени равно «00:00:00».

 select (date_trunc('month', now())   interval '1 month -1 day')::timestamp(0);
         ?column?          
---------------------------
 2014-06-30 00:00:00
(1 row)
  

sql возвращает дату правильно, но я хочу дату и время, как oracle.

Комментарии:

1. На самом деле, я думаю, что тот факт, что Oracle last_day сохраняет временную часть, следует считать ошибкой. Это просто не вписывается в область такого рода функций. Я даже не знал об этом, и, вероятно, любой, кто его использует, должен вернуться и вложить результат в a trunc , чтобы получить «чистое» значение.

Ответ №1:

 select (
    date_trunc('month', now())
      interval '1 month -1 day'
      now()::time
)::timestamp(0);
  

Ответ №2:

Функция last_day() должна сделать свое дело. Эта функция должна быть найдена в пакете расширения под названием «orafce». Содержит другие функции, используемые в Oracle.

  1. Установите правильную версию пакета orafce (если необходимо):

     apt-get install postgresql-9.1-orafce
      
  2. SQL:

     Create Extension orafce
      
  3. При ошибке переименуйте orafce—3.0.sql в orafce—3.03.sql или пользовательскую более позднюю версию orafce.

  4. Используйте функцию:

     SELECT last_day('2015-01-01')
      

Работает, как и ожидалось, и результат ‘2015-01-31’