Alguém poderia me ajudar a arrumar essa consulta para intervalos de datas? no formato timestamp? pois estou com 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 = 'meio'
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…
Outra coisa… precisava dar um apelido para este case, para pegar a data do sistema, quando vier sistema e data do dispositivo quando vier data do dispositivo
[quote=bomba544]E aí pacato, ainda “empacado” nessa? asuhaushhaus
Cara, para converter um campo de character para timestamp, é como te falei a outra vez:
WHERE (case when ......... dt_hora_dispositivo::timestamp BETWEEN '2014-01-01 23:00:00' and '2014-01-02 23:59:00'
testei rápido aqui mas parece que está funcionando… salvou a hora de novo bomba rsrss… Valeu
(CASE WHEN id_ult_mensagem = 'GTOBD'
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)
Uma dica: Se seu campo que recebe uma data, está com o formato padrão de timestamp, não tem porque ser um campo de character/varchar. Altere o tipo para timestamp…
ALTER TABLE nomeTabela ALTER COLUMN dt_hora_dispositivo TYPE timestamp. (ou timestamp without time zone)
Use também um default para as colunas de data/hora, se for um campo obrigatório.
ALTER TABLE nomeTabela ALTER COLUMN dt_hora_dispositivo SET DEFAULT now(); (no oracle é sysdate)