Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

S t o n e

Consulta com data e hora

Recommended Posts

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á !

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.