проблема tdate, с которой я сталкиваюсь в запросе SQL - PullRequest
0 голосов
/ 18 мая 2019

При получении отсчета из таблицы с помощью следующего запроса

Select count(*)  
from tab 
where tdate = '17-05-19' ---> output 0

или

Select count(*)  
from tab 
where trunc(tdate) = '17-05-19'  ---->output 0

Если я использую:

Select count(*)  
from tab 
where tdate  >sysdate - 1   ---> it returns some count(yesterday+some of the today txn)

Но здесь я хочу только вчера txn всякий раз, когда я запускаю этот запрос.

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Но здесь я хочу только вчера txn всякий раз, когда я запускаю этот запрос.

Вы можете использовать это.

Select count (*) from tab where
         tdate >= TRUNC(SYSDATE) - 1 
     AND tdate <  TRUNC(SYSDATE)

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

0 голосов
/ 18 мая 2019

Если вы пытались использовать

Select count(*) from tab where trunc(tdate) = date'2019-05-17'

( или, вы можете использовать Select count(*) from tab where to_char(tdate,'dd-mm-yy') = '17-05-19' путем форматирования через to_char функция

или, вы можете использовать Select count(*) from tab where trunc(tdate) = trunc(sysdate)-1 , чтобы получить только данные за день до )

Вы получите некоторые результаты, если у вас есть данные на дату 17 мая.

Итак, вам нужно предоставить форматирование для вашего литерала как date'2019-05-17' (известный как литерал даты ), особенно для Oracle DB, он может использоваться как '2019-05-17' без date части в MySQL как пример.

Кстати, функция trunc используется для извлечения части даты и удаления временной части значения столбца типа date.

Если ваша таблица заполнена огромными данными, поэтому производительность может иметь значение, тогда вы даже можете создать функциональный индекс для trunc(tdate).

Демо

...