S t o n e 0 Denunciar post Postado Fevereiro 8, 2012 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
Motta 645 Denunciar post Postado Fevereiro 8, 2012 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
S t o n e 0 Denunciar post Postado Fevereiro 9, 2012 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
Motta 645 Denunciar post Postado Fevereiro 9, 2012 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