QUANTIDADE DE DIAS ENTRE DUAS DATAS SEM CONSIDERAR SAB E DOM

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
51011934
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 12 Mar 2009 4:53 pm
Localização: PORTO ALEGRE
Diego Bernardes

Pessoal,

Tenho numa tabela com vários registros, cada registro tem uma data x. Eu preciso calcular sysdate - datax, porém tem que trazer a quantidade desconsiderando sáb (7) e dom (1).

Alguém saberia me ajudar?
Desde já, obrigado
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Eu tive a seguinte idéia:

Selecionar tudo

select dt, to_char(dt,'d')
from
  (select trunc(sysdate+1)-level dt
  from dual connect by level <=1000
  ) x
where dt >= '01-jan-2009'  
  and dt <= '20-jan-2009'
  and to_char(dt,'d') not in (1,7)
Veja, ele vai buscar todos os dias de segunda a sexta, entre 01-jan e 20-jan: (daí é só fazer um count).

Selecionar tudo

SQL> select dt, to_char(dt,'d')
  2  from
  3    (select trunc(sysdate)-level dt
  4    from dual connect by level <=1000
  5    ) x
  6  where dt >= '01-jan-2009'  
  7    and dt <= '20-jan-2009'
  8    and to_char(dt,'d') not in (1,7)
  9  /

DT        T
--------- -
20-JAN-09 3
19-JAN-09 2
16-JAN-09 6
15-JAN-09 5
14-JAN-09 4
13-JAN-09 3
12-JAN-09 2
09-JAN-09 6
08-JAN-09 5
07-JAN-09 4
06-JAN-09 3
05-JAN-09 2
02-JAN-09 6
01-JAN-09 5

14 rows selected.

SQL> 
Não sei se essa é a melhor forma, mas parece que funciona :-) Lembrando que ele ta pegando de HOJE até 1000 dias atras apenas.
51011934
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 12 Mar 2009 4:53 pm
Localização: PORTO ALEGRE
Diego Bernardes

Thomas,

A contagem está ok. O problema é que eu não consigo montar o select inserindo minha lista de datas nesta variável.

Ex da tabela que tenho:

Selecionar tudo

select ID, DATAX, (VARIÁVEL)
Pra cada registro eu preciso deste count

Não sei se me fiz entender.

Desde já, obrigado pela ajuda!
51011934
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 12 Mar 2009 4:53 pm
Localização: PORTO ALEGRE
Diego Bernardes

Consegui fazer o select do jeito que eu queria:

Selecionar tudo

select X.CASO, X.DATA_RECEBIMENTO, 
(
select count(dt) ATRASO 
from 
  (select trunc(sysdate+1)-level dt 
  from dual connect by level <=1000 
  ) x 
where dt >= X.DATA_RECEBIMENTO 
  and dt <= sysdate 
  and to_char(dt,'d') not in (1,7)
 ) ATRASO
 
 from TABELA X
Thomas, muito obrigado pela ajuda! Abraços!
Responder
  • Informação
  • Quem está online

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