to_date()
returnerar ett datum kl. 00:00:00, så du måste "ta bort" protokollet från datumet du jämför med:
select *
from table
where trunc(es_date) = TO_DATE('27-APR-12','dd-MON-yy')
Du vill förmodligen skapa ett index på trunc(es_date)
om det är något du gör regelbundet.
Den bokstavliga '27-APR-12'
kan misslyckas mycket lätt om standarddatumformatet ändras till något annat. Så se till att du alltid använder to_date()
med en korrekt formatmask (eller en ANSI-literal:date '2012-04-27'
)
Även om du gjorde rätt när du använde to_date()
och utan att förlita sig på omvandling av implicit datatyp har din användning av to_date() fortfarande en subtil fallgrop på grund av formatet 'dd-MON-yy'
.
Med en annan språkinställning kan detta lätt misslyckas, t.ex. TO_DATE('27-MAY-12','dd-MON-yy')
när NLS_LANG är inställt på tyska. Undvik allt i formatet som kan vara annorlunda på ett annat språk. Med ett fyrsiffrigt årtal och endast siffror t.ex. 'dd-mm-yyyy'
eller 'yyyy-mm-dd'