Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, estou com uma dúvida em relação a uma consulta com data/hora..
seguinte tenho que entrar com uma data inicial e final, e uma hora inicial e final..
a tabela no banco possui os seguintes campos de data:
DATA_INI, DATA_FIM, HORA_INI, HORA_FIM
Preciso filtrar todos os registros entre as datas entradas..
Ex. todos os registros entre os dias 06/02/2012 as 18:00 até 07/02/2012 as 06:00
não estou conseguindo realizar este tipo de consulta..
Agradeço desde já !
Alterei a tabela para os campos somente DATA_INI E DATA_FIM
cada registro tem sua datahora inicial e datahora final, hora que iniciou e finalizou o registro.
mas ainda não estou conseguindo consultar com data e hora inicial..
ex filtrei o dia 06/02 ao dia 07/02 das 20:00 as 06:00
o que preciso que a consulta retorne é os registros do dia 06/02 das 18:00 até o dia 07/02 as 06:00, consegui somente filtrar datahora de um registro somente assim o filtro so pega os dados do dia 06 e 07 entre os horarios iniciais e finais e preciso que o filtro de hora seja para o periodo inteiro e nao para cada registro.
Obrigado pela a ajuda.
tente :
select *
from tabela
where to_date('060220121800','ddmmyyyyhh24mi') between data_ini and data_fim
and to_date('070220120600','ddmmyyyyhh24mi') between data_ini and data_fim
Mas aqui tem um porém, se faz uma busca de um intervalo 06/02 das 18:00 até o dia 07/02 as 06:00 sobre outro, data_ini e data_fim, neste caso pode haver sobreposição, um dos intervalos entá dentro ou não.
05/02 06/12 07/02
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXXXXXXXXXXXXXXXxxxxxxxxxxxxxxxxxxx
[iNTERVALO1)
[iNTERVALO2]
[iNTER3]
[iNTERVALO4]
Qual o TYPE dos respectivos campos ?
O Formato DATE do Oracle suporta data e hora, sendo assim não é preciso criar um campo para gravar a hora, ele seria suportado pelo próprio DATE.
Vamos supor que os campos HORA sejam CHAR e tenham dados do tipo HH:MM ou HHMM.
Se os campos DATA foram DATE faça para converter os dois campos para "data&hora"
to_char(DATA_INI,'DD/MM/YYYY') -- converteu para char a data
to_char(DATA_INI,'DD/MM/YYYY')|| ' ' || HORA_INI -- 'JUNTOU' DATA E HORA
TO_DATE((to_char(DATA_INI,'DD/MM/YYYY')|| ' ' || HORA_INI),'DD/MM/YYYY HH:MI') -- FORMOU A DATA E HORA INICIAIS
Agora compare da data e hora que se quer com a data e hora da tabela
SELECT * FROM TABELA
WHERE ...
AND SYSDATE --DATA A SER COMPARADA
BETWEEN TO_DATE((to_char(DATA_INI,'DD/MM/YYYY')|| ' ' || HORA_INI),'DD/MM/YYYY HH:MI')
AND TO_DATE((to_char(DATA_FIM,'DD/MM/YYYY')|| ' ' || HORA_FIM),'DD/MM/YYYY HH:MI')
...
Sugestão :
Troque os campos da tabela para
DATAHORA_INI DATE,
DATAHORA_FIM DATE,
Ajudou ?