Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle SQL comparando datas


No Oracle, um DATE sempre tem um componente de tempo. Seu cliente pode ou não exibir o componente de tempo, mas ele ainda está lá quando você tenta fazer uma comparação de igualdade. Você também sempre quer comparar datas com datas em vez de strings que usam o NLS_DATE_FORMAT da sessão atual por fazer conversões implícitas, tornando-as bastante frágeis. Isso envolverá literais de data ANSI ou to_date explícito chamadas

Você pode usar o TRUNC função para truncar o DATE à meia-noite
SELECT *
  FROM porder
 WHERE trunc(odate) = date '2013-10-04'

Ou você pode fazer uma comparação de intervalo (o que será mais eficiente se você puder se beneficiar de um índice em odate )
SELECT *
  FROM porder
 WHERE odate >= to_date( '04-Oct-2013', 'DD-Mon-YYYY' )
   AND odate <  to_date( '05-Oct-2013', 'DD-Mon-YYYY' );