Ir para conteúdo

Arquivado

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

rdpacato

Calcular entre intervalos de datas TIMESTAMP

Recommended Posts

Olá Motta tudo bom?

 

 

Você poderia me ajudar a arrumar essa consulta para intervalos de datas? no formato timestamp? pois ainda estou com aquele problema de converter assim do jeito que está para string... às vezes vem a data, mas se a data final for menor (no sentido de dia) não traz nada...

SELECT id_fuel_level_input, id_fuel_consumption, id_vehicle_speed, id_engine_rpm, id_ult_mensagem, tb_telemetria.cod_dispositivo FROM tb_telemetria, tb_usuario, tb_veiculo
WHERE 
(CASE WHEN id_ult_mensagem = 'GTOBD' 
THEN to_char( dt_hora_dispositivo, 'DD/MM/YYYY') BETWEEN ('08/10/2014') AND ('08/10/2014') 
AND to_char( dt_hora_dispositivo, 'HH24:MI') BETWEEN ('09:00') AND ('10:17')  
ELSE to_char( dt_hora_sistema, 'DD/MM/YYYY') BETWEEN ('08/10/2014') AND ('08/10/2014') 
AND to_char( dt_hora_sistema, 'HH24:MI') BETWEEN ('09:00') AND ('10:17')  
END)
AND tb_usuario.cod_usuario = tb_telemetria.cod_usuario
AND tb_usuario.cod_usuario = tb_veiculo.cod_usuario
AND tb_veiculo.num_chassi = '9BGRP48F0EG236318'
AND tb_usuario.desc_login = 'ped6' 
AND id_ult_mensagem IN ('GTIGN','GTOBD','GTIGF')
ORDER BY tb_telemetria.dt_hora_sistema

Se eu colocar a data final como 07/10/2014, não retorna, mas se deixo a do dia 08/10/2014 ele retorna... então pensei em consultar como timestamp mesmo, juntando data hora = 08/10/2014 09:00 às 07/10/2014 10:17

 

mas sou ruim demais com bd, e não acertei a sintaxe disso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sendo Oracle e campo data faça assim

dt_hora_dispositivo 
BETWEEN to_date('08/10/2014 00:00:00','dd/mm/yyyy hh24:mi:ss') 
AND to_date('08/10/2014 23:59:59','dd/mm/yyyy hh24:mi:ss') 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dentro de todas as outras condições ?

 

=======

 

Mas não entendi este "where"

WHERE 
(CASE WHEN id_ult_mensagem = 'GTOBD' 
THEN to_char( dt_hora_dispositivo, 'DD/MM/YYYY') BETWEEN ('08/10/2014') AND ('08/10/2014') 
AND to_char( dt_hora_dispositivo, 'HH24:MI') BETWEEN ('09:00') AND ('10:17') 
ELSE to_char( dt_hora_sistema, 'DD/MM/YYYY') BETWEEN ('08/10/2014') AND ('08/10/2014') 
AND to_char( dt_hora_sistema, 'HH24:MI') BETWEEN ('09:00') AND ('10:17') 
END)

where o que ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem em todas as condições... mesmo eu consultando só as datas não está retornando...

 

este where está usando o case para caso for data meio (GTOBD) pegar a data do dispositivo, caso contrário (início, fim), pegar a data do sistema...

 

 

Esse foi o jeito que encontrei para consultar aquelas mensagens dentro do período, já que quando vinha inicio ou fim, vinha data zuada do dispositivo... então uso a data do sistema

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então não deve ter , já fiz esta síntaxe diversas vezes (Oracle).

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem, olha:

"1969-12-31 17:59:59";"2014-10-08 08:43:47";0;" 
";0;0;"inicio";"QAG0034306""2014-10-08 08:44:29";"2014-10-08 
08:43:56";0;"Inf";0;1252;"meio";"QAG0034306""2014-10-08 
08:44:59";"2014-10-08 
08:44:26";0;"Inf";0;1252;"meio";"QAG0034306""2014-10-08 
08:45:29";"2014-10-08 
08:44:56";0;"11.";13;1464;"meio";"QAG0034306""2014-10-08 
08:45:59";"2014-10-08 
08:45:25";0;"Inf";0;1207;"meio";"QAG0034306""2014-10-08 
08:46:29";"2014-10-08 
08:45:55";0;"5.7";44;3078;"meio";"QAG0034306""2014-10-08 
08:46:59";"2014-10-08 
08:46:25";0;"6.3";14;1000;"meio";"QAG0034306""2014-10-08 
08:47:29";"2014-10-08 
08:46:55";0;"9.2";18;2055;"meio";"QAG0034306""2014-10-08 
08:47:59";"2014-10-08 
08:49:37";0;"25.2";10;1895;"meio";"QAG0034306""2014-10-08 
08:48:29";"2014-10-08 
08:51:26";0;"25.2";3;1244;"meio";"QAG0034306""1969-12-31 
17:59:59";"2014-10-08 08:51:28";0;"25.2";3;1244;"final";"QAG0034306"


mas com a consulta:

SELECT id_fuel_level_input, id_fuel_consumption, id_vehicle_speed, 
id_engine_rpm, id_ult_mensagem, tb_telemetria.cod_dispositivo FROM 
tb_telemetria, tb_usuario, tb_veiculoWHEREdt_hora_dispositivoBETWEEN 
to_date('08/10/2014 07:00','DD/MM/YYYY HH24:MI')AND to_date('08/10/2014 
10:59','DD/MM/YYYY HH24:MI')

 

não retorna valores

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente não entendi , alguma coisa talvez de diferente entre Oracle e PostgreeSql em termos de timestamp.

 

Realmente não sei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui assim motta:

(CASE WHEN id_ult_mensagem = 'meio' THEN dt_hora_dispositivo::timestamp 
BETWEEN '2014-10-08 00:00:00' and '2014-11-01 23:59:00'ELSE 
dt_hora_sistema::timestamp BETWEEN '2014-10-08 00:00:00' and '2014-11-01 
23:59:00'    END)

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.