Esta dica é para obter somente a parte da data em um campo do tipo timestamp ou date do ORACLE, pois o mesmo armazena a data e a hora juntos.
Em uma expressão SQL, na parte where podemos encontrar as seguintes situações:
Situação 1: Não é o que você quer!
where DATA_COMPRA = TRUNC(SYSDATE)
ou
Situação 2: Funciona mas não usa índice!
where TRUNC(DATA_COMPRA) = TRUNC(SYSDATE)
ou
Situação 3: A forma correta
DATA_COMPRA BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + 1 - 1/24/60/60
Explicação:
As três situações vão executar sem erro do Oracle, mas a primeira pode não retornar todos os registros pois existe a parte da hora armazenado no campo, o que faz com que a comparação resulte em True somente para os campos exatamente iguais em data e hora.
A segunda situação impede que o ORACLE utilize índices para agilizar as pesquisas. Mesmo se um índice for criado na coluna DATA_COMPRA, o ORACLE não poderá utilizar.
OBS.: Existe um tipo de índice baseado em função que permite que o ORACLE utilize um índice, mas não é interessante sobrecarregar o ORACLE com este tipo de situação.
A terceira situação, é a única forma de realizar a consulta de forma rápida, pois o ORACLE vai conseguir utilizar um índice, se existir é claro. A metodologia consiste em verificar se a data está no período compreendido entre a meia noite até o último segundo do dia.
Nenhum comentário:
Postar um comentário