Последняя дата со временем месяца

44
3

Нужна ваша помощь, чтобы завершить запрос для получения последнего времени даты месяца sysdate.

select to_char(last_day(sysdate),'DD-Mon-YYYY HH24:MI:SS') from dual

он дает последнюю дату, как ожидалось, но мне нужно время как 23:59:00 что невозможно через запрос.

спросил(а) 2016-02-23T14:19:00+03:00 3 года, 9 месяцев назад
2
Решение
45

Вы можете использовать TRUNC на следующий день, то есть SYSDATE + 1, а затем вычесть 60 секунд, т.е. 60/86400 чтобы получить желаемый результат.

SQL> SELECT to_char((trunc(last_day(sysdate)) +1) - 60/86400,'DD-Mon-YYYY HH24:MI:SS') dt
2 FROM dual;

DT
--------------------
29-Feb-2016 23:59:00

SQL>

Вы также можете использовать interval '1' minute или interval '60' second вместо 60/86400.

ответил(а) 2016-02-23T14:31:00+03:00 3 года, 9 месяцев назад
Еще 1 ответ
32

Если вы просто хотите его отобразить по какой-либо причине, вы можете жестко закодировать время в маске формата:

select to_char(last_day(sysdate), 'DD-Mon-YYYY "23:59:00"') from dual;

Но вы, вероятно, действительно хотите, чтобы это был объект даты, и в этом случае вы можете добавить 23 часа и 59 минут к усеченной (полночной) дате, wchi - 1439 из 1440 минут в день:

select to_char(trunc(last_day(sysdate)) + 1439/1440, 'DD-Mon-YYYY HH24:MI:SS')
from dual;

Или вы можете пойти на следующий день и удалить минуту, либо с дробными днями, либо с интервалами:

select to_char(trunc(last_day(sysdate)) + interval '1' day - interval '1' minute,
'DD-Mon-YYYY HH24:MI:SS') from dual;

Как правило, если вы работаете с периодами времени, которые вы хотите включить до 23:59:59, что вы также можете сделать с любым из этих методов, но, как сказал Damien_The_Unbeliever в комментарии, легче сравнивать с началом следующего (например, < add_months(trunc(sysdate, 'MM'), 1). Легко случайно пропустить часть дня, не принимая во внимание должным образом, особенно если у вас на самом деле есть метка времени, а не дата.

ответил(а) 2016-02-23T14:33:00+03:00 3 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема