PL SQL - Dúvida Query com range de datas

Oracle

18/02/2016

Galera, alguém me socorre nessa?

Preciso construir uma query que traga os registros do horário operacional da empresa que vai das 06:00:00 às 05:59:59 do dia seguinte.
Não sei como posso fazer isso, basicamente tenho duas condições:
select * from  tooldba.vw_sort_volume_conhec t 
  where T.SO_VOLCON_RSCCDATADESCIDA between (to_date(sysdate, 'DD/MM/RRRR') + 360 / 1440)-1 and sysdate 
  and NVL(T.ID_FILIAL_OPERACAO, 1) = 4 


ou
select * from  tooldba.vw_sort_volume_conhec t 
  where T.SO_VOLCON_RSCCDATADESCIDA between (to_date(sysdate, 'DD/MM/RRRR') + 360 / 1440) and sysdate
  and NVL(T.ID_FILIAL_OPERACAO, 1) = 4 


Sendo que a consulta irá rodar automaticamente, em um relatório.

Obrigadooo!
Daniel

Daniel

Curtidas 0

Melhor post

Hector Figueroa

Hector Figueroa

18/02/2016

Boas Daniel,
não sei se entendi muito bem mas se for pesquisar colocando o horário seria algo +- assim :

select To_Char(data, 'HH24:MI:SS') Hora
from tabela
where To_Char(data, 'HH24:MI:SS') BETWEEN '06:00:00' and '05:59:59'
order by To_Char(data, 'HH24:MI:SS');
GOSTEI 1

Mais Respostas

Daniel

Daniel

18/02/2016

Opa, valeu Hector!

O problema é o seguinte o range que preciso começa em um dia e termina em outro, por exemplo: começou HOJE às 06:00:00 e vai até AMANHÃ às 05:59:59.
Eu tinha tentado usar o seguinte:
select  *
  from tooldba.vw_sort_volume_conhec t
where T.SO_VOLCON_RSCCDATADESCIDA between to_date(sysdate, 'DD/MM/RRRR') and sysdate
  


Mas o problema que se eu executar essa consulta às 04:00:00 (por exemplo) esse lógica não funcionará

Muito obrigado pela ajuda cara!!!
GOSTEI 0
Jair N.

Jair N.

18/02/2016

Boa Tarde converte tudo para "data e Hora" e o intervalo continua sendo BETWEEN
EX:
SELECT CAST(TO_CHAR(CAST('17-02-2016' AS DATE),'DD-MM-YYYY') || TO_CHAR(CAST('08:20:32' AS TIME), ' HH:MI:SS') AS TIMESTAMP) AS periodo FROM DUAL
UNION
SELECT CAST(TO_CHAR(CAST('18-02-2016' AS DATE),'DD-MM-YYYY') || TO_CHAR(CAST('11:23:54' AS TIME), ' HH:MI:SS') AS TIMESTAMP) AS periodo FROM DUAL
GOSTEI 1
Hector Figueroa

Hector Figueroa

18/02/2016

Daniel testa a consulta abaixo a primeira e de acordo com a data/hora atual, sendo que ela pega a data/hora de ontem ate o atual momento
select *
from tooldba.vw_sort_volume_conhec t
where To_Char(T.SO_VOLCON_RSCCDATADESCIDA, 'DD/MM/RRRR HH24:MI:SS') between to_date(sysdate, 'DD/MM/RRRR HH24:MI:SS') - 1 and to_date(sysdate, 'DD/MM/RRRR HH24:MI:SS');


segue um exemplo, ve ae e me fala se funcionaria :)
select *
from tooldba.vw_sort_volume_conhec t
where To_Char(T.SO_VOLCON_RSCCDATADESCIDA, 'DD/MM/RRRR HH24:MI:SS') between to_date('17/01/2016 15:40:00', 'DD/MM/RRRR HH24:MI:SS') and to_date('18/01/2016 15:40:00', 'DD/MM/RRRR HH24:MI:SS');

GOSTEI 1
Daniel

Daniel

18/02/2016

Jair e Hector!

Galera obrigado pela ajuda, mas não rolou!!!

Na minha ignorância e limitação de entendimento de SQL tentei o seguinte:

select
case
 when
  T.SO_VOLCON_RSCCDATADESCIDA < (to_date(sysdate, 'DD/MM/RRRR') + 360 / 1440) then
  (select * from  tooldba.vw_sort_volume_conhec t 
  where T.SO_VOLCON_RSCCDATADESCIDA between (to_date(sysdate, 'DD/MM/RRRR') + 360 / 1440)-1 and sysdate 
  and NVL(T.ID_FILIAL_OPERACAO, 1) = 4 
  order by T.SO_VOLCON_RSCCDATADESCIDA)
  
  else
  
  (select * from  tooldba.vw_sort_volume_conhec t 
  where T.SO_VOLCON_RSCCDATADESCIDA between (to_date(sysdate, 'DD/MM/RRRR') + 360 / 1440) and sysdate
  and NVL(T.ID_FILIAL_OPERACAO, 1) = 4 
  order by T.SO_VOLCON_RSCCDATADESCIDA)
  end
  from oldba.vw_sort_volume_conhec t


acho que observando essa minha tentativa vocês entendem melhor a minha necessidade.

Valeu Pessoal!!!
GOSTEI 0
POSTAR