W Oracle DATE
zawsze ma składnik czasu. Twój klient może, ale nie musi, wyświetlać składnik czasu, ale nadal tam jest, gdy próbujesz wykonać porównanie równości. Zawsze chcesz także porównywać daty z datami, a nie ciągami, które używają NLS_DATE_FORMAT
bieżącej sesji za wykonywanie niejawnych konwersji, przez co stają się one raczej kruche. Będzie to obejmować albo literały daty ANSI, albo jawne to_date
połączenia
Możesz użyć TRUNC
funkcja obcinania DATE
do północy
SELECT *
FROM porder
WHERE trunc(odate) = date '2013-10-04'
Lub możesz przeprowadzić porównanie zakresów (które będzie bardziej wydajne, jeśli możesz skorzystać z indeksu na odate
)
SELECT *
FROM porder
WHERE odate >= to_date( '04-Oct-2013', 'DD-Mon-YYYY' )
AND odate < to_date( '05-Oct-2013', 'DD-Mon-YYYY' );