Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia tenho a seguinte consulta.
SELECT a.id_atend, a.num_senha, a.id_pri, a.id_stat,
to_char(a.dt_cha,'DD/MM/YYYY') as dt_cha,
to_char(a.dt_cheg,'HH24:MI:SS') as dt_cheg,
to_char(a.dt_ini,'HH24:MI:SS') as dt_ini,
to_char(LOCALTIMESTAMP, 'HH24:MI:SS')as dt_agora,
to_char(a.dt_fim,'HH24:MI:SS') as dt_fim,
to_char(a.dt_agendamento,'HH24:MI:SS') as dt_agendamento,
p.nm_pri, p.desc_pri, p.peso_pri, us.sigla_serv, us.id_serv
FROM atendimentos a
INNER JOIN uni_serv us
ON us.id_serv = a.id_serv
AND a.id_uni = us.id_uni
INNER JOIN servicos s
ON s.id_serv = us.id_serv
INNER JOIN prioridades p
ON p.id_pri = a.id_pri
WHERE
(a.dt_agendamento <= LOCALTIMESTAMP or a.dt_agendamento is NULL)
AND us.id_serv IN (92)
AND s.stat_serv = 1
AND us.stat_serv = 1
AND us.id_uni = 3
AND a.id_stat IN (1)
ORDER BY dt_agendamento, dt_cheg DESC
Estou querendo trazer somente os atendimentos que estão com o agendamento de horário que está na coluna a.dt_agendamento, mas ele está me trazendo todos os dados, está clausulá
(a.dt_agendamento <= LOCALTIMESTAMP or a.dt_agendamento is NULL)
talvez não esteja funcionando pois ele me traz os atendimentos que ainda não eram para estar aparecendo. O oracle não me retorna nenhum erro ele somente me traz todos os atendimentos quando na realidade queria os atendimentos que ja chegou na hora marcada.
Desde já agradeço.
>
Já tentou SYSDATE no lugar de LOCALTIMESTAMP ?
Qual o TYPE das colunas de data, DATE ?
Sim ja tentei com o SYSDATE e não funcionou. O tipo da coluna é o timestamp com precisão 6 ja fiz consultas entre datas e funcionou só que está não está me retornando.
O dado está salvo da seguinte maneira '17/08/12 10:58:50,000000000 -03:00'
Nunca usei este tipo timestamp realmente não sei o funcionamento.
Acho que em outro tópico você disse que tinha realmente de usar timestamp , não ?
O "manuel" não ajudou em nada ?
Infelizmente eu tenho que me utilizar do timestamp é bem preciso ja verifiquei o manual e alguns forums gringos, mas até agora sem nenhuma solução continuarei a pesquisar sobre esse problema e qualquer avança eu posto aqui. Só lembrando que em outras consultas eu consigo trazer um intervalo de data perfeitamente e nesta consulta era para ele me trazer todos os campos até determinanda data e não funcionando.
Veja se isto ajuda.
Não li todo, é meio extenso mas parece tratar destas comparações (time zone etc).
Raça consegui resolver criando a seguinte função.
CREATE OR REPLACE FUNCTION DIF_DATA (dt_agendamento timestamp) RETURN number is
total number := null;
BEGIN
total := ((extract( day from (dt_agendamento) )2460*60)+
(extract( hour from (dt_agendamento) )6060)+
(extract( minute from (dt_agendamento) )*60)+
(extract( second from (dt_agendamento)))) -
((extract( day from (SYSTIMESTAMP))2460*60)+
(extract( hour from (SYSTIMESTAMP))6060)+
(extract( minute from (SYSTIMESTAMP))*60)+
(extract( second from (SYSTIMESTAMP))));
RETURN total;
END;
Nela eu passo como paramentro a data que eu quero comparar com a data atual do sistema onde ele me retorna um number, se for menor que zero a data já passou se for maior que zero a data ainda não passou.
Valeu pessoal pode dar o tópico como resolvido.
Já tentou SYSDATE no lugar de LOCALTIMESTAMP ?
Qual o TYPE das colunas de data, DATE ?