Каков наилучший способ найти все даты, которые соответствуют введенной вами дате? - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь получить все результаты из БД Oracle с использованием SQL Developer к соответствующей дате.

Мои данные:

ID         | date_time_of_identification
--------------------------------------------
1240088696 | 22-SEP-19 06.24.23.432000000 AM
1239485087 | 21-SEP-19 09.25.45.912000000 AM
1239228398 | 21-SEP-19 07.18.40.555000000 AM
1239223300 | 21-SEP-19 07.16.39.812000000 AM
1233224199 | 18-SEP-19 10.54.04.023000000 AM
1232432331 | 18-SEP-19 05.06.40.383000000 AM
1231492850 | 17-SEP-19 01.06.05.316000000 PM

Поэтому я пытаюсь получить все строки с 21.09.2019, тогда я пишу:

select * from mytable where date_time_of_identification = TO_DATE('2019/09/21', 'yyyy/mm/dd'); -- no result

Теперь я пытаюсь написать лучший запрос:

select * from mytable 
where to_char(date_time_of_identification, 'yyyy/mm/dd') = to_char(TO_DATE('2019/09/21', 'yyyy/mm/dd'), 'yyyy/mm/dd'); 

Возвращает хороший результат, но есть ли лучшее решение?

Ответы [ 2 ]

4 голосов
/ 24 сентября 2019

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

 select * 
   from mytable 
  where trunc(date_time_of_identification) = TO_DATE('2019/09/21', 'yyyy/mm/dd');
1 голос
/ 24 сентября 2019

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

select *
  from myTable
 where date_time_of_identification >= date '2019-09-21'
   and date_time_of_identification <  date '2019-09-22'

Альтернативой может быть создание индекса на основе функции для date_time_of_identification и затем использование этой функции в запросе.

create index fbi_myTable
    on trunc( date_time_of_identification );

select *
  from myTable
 where trunc( date_time_of_identification ) = date '2019-09-21';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...