Eu tenho uma variável em um procedimento armazenado Oracle do DATE
tipo (da interface do usuário), e outra do TIMESTAMP
tipo (banco de dados é mais preciso do que o usuário digitaria no código que está executando o procedimento armazenado).
Eu gostaria de fazer algo assim: (pseudo código)
select * from MYDATABASE where inputDate = extract(date from myDatabaseTimeStamp);
mas recebo um erro de compilação quando tento isso. Alguma idéia de qual é uma boa solução de código real para isso?
Supondo que o DATE da interface do usuário possa conter horas além de 00:00:00 (meia-noite) e que você só queira saber se o DATE da interface do usuário e o TIMESTAMP caem no mesmo dia (não na mesma hora ou minuto ou ?), tente isso:
Nota 1: Como "inputDate" é uma coluna de banco de dados e pode ser indexada, não queremos fazer isso
TRUNC(inputDate)
porque o índice não será usado.Nota 2: Fazer o CAST antes da instrução SQL impede este aviso de compilação PL/SQL: PLW-07204: conversão para longe do tipo de coluna pode resultar em plano de consulta sub-ótimo ... Edit: Depois de testar isso no 10.2 XE, até o " myDatabaseDate + 1" causa o aviso então, embora pareça fazer muito para agradar o compilador, adicionei "myDatabaseNextDay := myDatabaseDate + 1;"
Você pode usar
trunc()
:ou, com o seu exemplo:
Veja um exemplo funcional no SQLFiddle e a documentação .