Como consultar registros com validação de horário

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Pessoal,

Nesse select preciso validar se os técnicos tem um determinado status que nesse exemplo é o código 61 e que na condição existente não poderá ter chamados com esse código entre 08:45 e 12:00 ...Está correto a minha lógica nesse caso?


Selecionar tudo

select u.nm_apelido
  from seg.usuarios u
  where u.fl_recebe_mensagens='S'
  and u.cd_situacao = 1 -- Status de Ativo na Seg.Usuários
  and   u.cd_usuario  in (select distinct c.cod_tecnico
                             from sgc.chamados c
                             where c.cod_status in (61))
                             and to_char(sysdate,'HH24:MI') between '08:45' and '12:00';
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Acredito que não irá funcionar corretamente assim,

aconselho forcar a mesma data dos dois lados, e concatenar com as horas que precisa,

Selecionar tudo

to_date('01/01/2010'||to_char(sysdate, 'HH24:MI'),'DD/MM/RRRR HH24:MI') between to_date('01/01/2010 08:45','DD/MM/RRRR HH24:MI')
and to_date('01/01/2010 18:45','DD/MM/RRRR HH24:MI')
coloco o mesmo dia dos dois lados, e junto as horas que quero, dessa forma sendo o mesmo dia, ele irá se basear apenas nas horas...

entendeu a idéia?
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

O seguinte código na subquery..apesar de estar correto..está trazendo todos os dados..pode ter algum erro de sintaxe..

Era para filtrar esses registros entre 07:45 e 12:00 e depois só a partir das 13:10 até as 18:00 e ai não mais enviar mensagens após as 18 horas...Alguém pode me ajudar nessa lógica..

Selecionar tudo

select u.nm_apelido
  from seg.usuarios u
  where u.fl_recebe_mensagens='S'
  and u.cd_situacao = 1 -- Status de Ativo na Seg.Usuários
  and   u.cd_usuario not in (select c.cod_tecnico
                             from sgc.chamados c
                             where c.cod_status in (4)
                             and to_date('01/01/2010'||to_char(sysdate, 'HH24:MI'),'DD/MM/RRRR HH24:MI') 
                             between to_date('01/01/2010 07:45','DD/MM/RRRR HH24:MI') 
                             and to_date('01/01/2010 12:00','DD/MM/RRRR HH24:MI'))
  and   u.cd_usuario not in (select c.cod_tecnico
                             from sgc.chamados c
                             where c.cod_status in (4)
                             and to_date('01/01/2010'||to_char(sysdate, 'HH24:MI'),'DD/MM/RRRR HH24:MI') 
                             between to_date('01/01/2010 13:10','DD/MM/RRRR HH24:MI') 
                             and to_date('01/01/2010 18:00','DD/MM/RRRR HH24:MI'))
                             ;
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP

me parece que o erro está nos trechos onde existe o seguinte código:

Selecionar tudo

to_char(sysdate, 'HH24:MI')
Onde o correto não seria o sysdate e sim uma data armazenada na tabela de chamados... será isso?

:-o
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Deixa eu tentar explicar melhor. A questão que preciso solucionar é que todos os status diferentes do código (4) precisam ter alguns critérios de horários nos quais não podem enviar as mensagens antes das 7:45 e entre 12:00 e 13:10 também não e também após ás 18 horas não poderá ser enviada.




Selecionar tudo

select u.nm_apelido 
  from seg.usuarios u 
  where u.fl_recebe_mensagens='S' 
  and u.cd_situacao = 1 -- Status de Ativo na Seg.Usuários 
  and   u.cd_usuario not in (select c.cod_tecnico 
                             from sgc.chamados c 
                             where c.cod_status in (4) 
                             and to_date('01/01/2010'||to_char(sysdate, 'HH24:MI'),'DD/MM/RRRR HH24:MI') 
                             between to_date('01/01/2010 07:45','DD/MM/RRRR HH24:MI') 
                             and to_date('01/01/2010 12:00','DD/MM/RRRR HH24:MI')) 
  and   u.cd_usuario not in (select c.cod_tecnico 
                             from sgc.chamados c 
                             where c.cod_status in (4) 
                             and to_date('01/01/2010'||to_char(sysdate, 'HH24:MI'),'DD/MM/RRRR HH24:MI') 
                             between to_date('01/01/2010 13:10','DD/MM/RRRR HH24:MI') 
                             and to_date('01/01/2010 18:00','DD/MM/RRRR HH24:MI')) 
                             ;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 18 visitantes