последний день / время месяца - PullRequest
1 голос
/ 01 июня 2019

Как мне получить последний день месяца в 11:59:59 вечера? Прямо сейчас это показывает 31.05.2009 в 12:00. Если я просто использую sysdate, он просто показывает время, когда я его запустил. Благодарю.

LAST_DAY(TRUNC(SYSDATE,'MM'))

Ответы [ 3 ]

4 голосов
/ 01 июня 2019

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

SELECT
    LAST_DAY(TRUNC(SYSDATE,'MM')) + INTERVAL '1' DAY - INTERVAL '1' SECOND
FROM dual;

Или, если вы также хотите увидеть компонент времени, используйте CURRENT_TIMESTAMP вместо SYSDATE:

SELECT
    LAST_DAY(TRUNC(CURRENT_TIMESTAMP,'MM')) + INTERVAL '1' DAY - INTERVAL '1' SECOND
FROM dual;

Это выведено:

30.06.2019 23:59:59
0 голосов
/ 01 июня 2019

Я бы использовал:

SELECT TRUNC(SYSDATE, 'MM') + INTERVAL '1' MONTH - INTERVAL '1' SECOND
FROM dual;

(Это на один шаг меньше, чем решение Тима.)

Или по старинке:

SELECT ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1) - 1/(24*60*60)

Если вы преобразуете это в метку времени, вы увидите значение времени:

SELECT CAST(TRUNC(sysdate, 'MM') + INTERVAL '1' MONTH - INTERVAL '1' SECOND as TIMESTAMP)
FROM dual;
0 голосов
/ 01 июня 2019

Способ oldfashioned состоит в том, чтобы вычесть из первого дня секунду (это то, что представляет 1 / (24*60*60), поскольку 24 часа в дне, 60 минут в часе и 60 секунд в минуте) следующего месяца (и это то, что делает trunc(add_months(sysdate, 1))):

SQL> select sysdate today,
  2         trunc(add_months(sysdate, 1)) - 1/(24*60*60) result
  3  from dual;

TODAY                  RESULT
---------------------- ----------------------
06/01/2019 07:52:40 AM 06/30/2019 11:59:59 PM

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...