Consultar datas [RESOLVIDO]

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

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'

Veja se resolve seu problema.

[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'

Veja se resolve seu problema.[/quote]

é bomba to na mer#$ com isso rsrsrsrs…

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)

Oi Bomba, é timestamp o campo… eu vou mudar na aplicação o tipo para poder consultar como timestamp direto… valeu pelas dicas