Oracle SQL сегодняшняя дата из данных - PullRequest
0 голосов
/ 07 марта 2019

Извиняюсь за то, что я очень зеленый в SQL.

В настоящее время я пытаюсь выполнить следующее:

SELECT * 
FROM test.message 
WHERE MESSAGESUBJECT LIKE '%test%'
AND MESSAGEDATE = CURRENT_DATE

Однако результаты не отступают - полагал, что это фактформат данных в поле в настоящее время выглядит следующим образом:

07-MAR-19 08.13.53.00000000 PM

Таким образом, очевидное решение состоит в том, чтобы заставить его смотреть на начало поля - где я теряю трек, это то, что мне нужнозапрос на работу, которая выполняется ежедневно, поэтому я не могу использовать точные.Кто-нибудь может помочь?

Спасибо,

D.

1 Ответ

0 голосов
/ 07 марта 2019
 SELECT * 
 FROM test.message 
 where MESSAGESUBJECT like '%test%' 
 and MESSAGEDATE BETWEEN TRUNC(CURRENT_DATE) AND TRUNC(CURRENT_DATE) + 86399/86400

Это получит строки, где дата сообщения была в любое время сегодня.

Бит 86399/86400 - это количество секунд в дне минус 1, поэтому диапазон BETWEEN охватывает весь день, а не следующий день (что будет делать TRUNC(CURRENT_DATE)+1).

Вместо добавления 86399/86400 некоторые считают более понятным добавить целый день, а затем вычесть INTERVAL из 1 секунды. Это также работает, как и:

AND MESSAGEDATE >= TRUNC(SYSDATE)
AND MESSAGEDATE < TRUNC(SYSDATE)+1  -- Thanks @WernfriedDomscheit

Использование

AND TRUNC(MESSAGEDATE) = TRUNC(CURRENT_DATE)

логически правильно, но Oracle не может использовать индекс на MESSAGEDATE, если он есть, что может лишить вас максимальной производительности. Но если у вас есть индекс, основанный на функции TRUNC(MESSAGEDATE), то последний способ также является разумным вариантом.

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