to_date()
връща дата в 00:00:00, така че трябва да "премахнете" минутите от датата, с която сравнявате:
select *
from table
where trunc(es_date) = TO_DATE('27-APR-12','dd-MON-yy')
Вероятно искате да създадете индекс на trunc(es_date)
ако това е нещо, което правите редовно.
Литералът '27-APR-12'
може да се провали много лесно, ако форматът на датата по подразбиране се промени на нещо различно. Затова се уверете, че винаги използвате to_date()
с подходяща маска за формат (или ANSI литерал:date '2012-04-27'
)
Въпреки че постъпихте правилно като използвате to_date()
и без да разчитате на имплицитно преобразуване на типове данни, вашето използване на to_date() все още има фин капан поради формата 'dd-MON-yy'
.
С различна езикова настройка това може лесно да се провали, напр. TO_DATE('27-MAY-12','dd-MON-yy')
когато NLS_LANG е настроен на немски. Избягвайте всичко във формата, което може да е различно на друг език. Използване на четирицифрена година и само числа, напр. 'dd-mm-yyyy'
или 'yyyy-mm-dd'