игнорирование метки времени в предложении WHERE при сравнении с датой - PullRequest
2 голосов
/ 23 мая 2011

В моей таблице есть записи, подобные этим

23-MAY-11 11.40.39.000000 AM

Следующий запрос ничего не приносит

SELECT * 
  FROM my_table 
 WHERE tenant_pha = 'test'
   AND create_date >= TO_DATE('05/10/2011','mm/dd/yyyy')
   AND create_date <= TO_DATE('05/23/2011','mm/dd/yyyy')

Однако приведенный ниже запрос принесет данные

SELECT * 
  FROM my_table 
 WHERE tenant_pha = 'test'
   AND create_date >= TO_DATE('05/10/2011','mm/dd/yyyy')
   AND create_date <= TO_DATE('05/24/2011','mm/dd/yyyy')

Я думаю, это потому, что столбец create_date является отметкой времени.

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

Ответы [ 2 ]

4 голосов
/ 23 мая 2011

Вы правы относительно отметки времени. '05 / 23/2011 'совпадает с '05 / 23/2011 12:00 AM'.

Чтобы включить целый день, я обычно сдвигаю дату на день вверх. <'05 / 24/2011 'будет включать все 5 / 23. </p>

или изменить на '05 / 23/2011 23: 59: 59 '

2 голосов
/ 23 мая 2011

Вы можете без проблем использовать trunc (), вам нужно только создать индекс на основе функции.

Если вы создадите этот индекс:

CREATE INDEX idx_trunc_date ON my_table (trunc(create_date));

, тогда будет использовано следующее условиеиз этого индекса:

AND trunc(create_date) >= TO_DATE('05/10/2011','mm/dd/yyyy')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...