#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
сохраняет временную часть, следует считать ошибкой. Это просто не вписывается в область такого рода функций. Я даже не знал об этом, и, вероятно, любой, кто его использует, должен вернуться и вложить результат в atrunc
, чтобы получить «чистое» значение.
Ответ №1:
select (
date_trunc('month', now())
interval '1 month -1 day'
now()::time
)::timestamp(0);
Ответ №2:
Функция last_day() должна сделать свое дело. Эта функция должна быть найдена в пакете расширения под названием «orafce». Содержит другие функции, используемые в Oracle.
-
Установите правильную версию пакета orafce (если необходимо):
apt-get install postgresql-9.1-orafce
-
SQL:
Create Extension orafce
-
При ошибке переименуйте orafce—3.0.sql в orafce—3.03.sql или пользовательскую более позднюю версию orafce.
-
Используйте функцию:
SELECT last_day('2015-01-01')
Работает, как и ожидалось, и результат ‘2015-01-31’