формат sysdate не работает в предложении where со временем - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь выполнить следующий запрос на oracle на PL / SQL разработчику, чтобы выбрать список временных интервалов между текущим временем и концом дня:

SELECT T.VISIT_DATE
  FROM REGISTRATION.VU_SCHEDULE T
 WHERE T.VISIT_DATE BETWEEN TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI:SS')
 AND   TO_DATE('27-MARCH-2020 23:59:59', 'DD-MON-YYYY HH24:MI:SS')
 ORDER BY VISIT_DATE

, но он дает мне результат целого дня вместо текущего времени дня

    VISIT_DATE
1   3/27/2020 9:00:00 AM
2   3/27/2020 9:15:00 AM
3   3/27/2020 9:30:00 AM
4   3/27/2020 9:45:00 AM
5   3/27/2020 10:00:00 AM
6   3/27/2020 10:15:00 AM
7   3/27/2020 10:30:00 AM
8   3/27/2020 10:45:00 AM
9   3/27/2020 11:00:00 AM
10  3/27/2020 11:15:00 AM
11  3/27/2020 11:30:00 AM
12  3/27/2020 11:45:00 AM

например, если текущее время 11:00, то оно должно давать результат текущего времени.

Я пробовал trun c (sysdate), но он не работает

ПРИМЕЧАНИЕ:

Условие должно иметь дату и время с настоящего момента до конца дня в формате.

1 Ответ

3 голосов
/ 27 марта 2020

должны иметь дату и время с настоящего момента до конца дня в формате.

Вы можете сделать:

where t.visit_date >= sysdate and t.visit_date < trunc(sysdate) + 1

Обоснование:

  • sysdate дает вам текущую дату / время, которое представляет нижнюю границу интервала

  • trunc(sysdate) - начало текущего дня ( сегодня в полночь), к которому вы можете добавить 1, чтобы получить начало следующего дня; это (исключительная) верхняя граница диапазона

Обратите внимание, что нет никакого смысла применять to_date() к функции sysdate, которая создает дату уже.

...