Pesquisar este blog

domingo, 29 de novembro de 2009

Como obter somente a data no ORACLE

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