[oracle_br] Re: SQL - Período - Datas
Ou seja, em resumo vc quer "inventar dados", ie, vc quer 'criar' dados (um conjunto de linhas no caso) que não estão na tabela ok, pra vc fazer isso as duas técnicas principais são usar a ALL_OBJECTS ou usar o connect by , veja https://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:14582643282111 Um exemplo AINDA INCOMPLETO mas bem adiantado nesse caminho seria este abaixo, no caso usando a técnica do infinite dual/connect by : SQL> create table T (Codigo varchar2(4),Nome varchar2(40) ,DataInicio date,DataFim date); Tabela criada. SQL> insert into T values('0001', 'Nome Teste 0001', '01/05/2017', '10/05/2017'); 1 linha criada. SQL> insert into T values('0002', 'Nome Teste 0002', '10/06/2017', '15/06/2017'); 1 linha criada. SQL> with nums 2 as 3 (select level R 4 from dual 5 connect by level <= 60 6 ) 7 select t.codigo, (t.DataInicio+r) -1 dt, 8 t.DataFim 9 from t, nums 10where (nums.r - 1) + t.DataInicio between t.DataInicio and t.DataFim 11order by 1,2; CODI DT DATAFIM 0001 01/05/17 10/05/17 0001 02/05/17 10/05/17 0001 03/05/17 10/05/17 0001 04/05/17 10/05/17 0001 05/05/17 10/05/17 0001 06/05/17 10/05/17 0001 07/05/17 10/05/17 0001 08/05/17 10/05/17 0001 09/05/17 10/05/17 0001 10/05/17 10/05/17 0002 10/06/17 15/06/17 0002 11/06/17 15/06/17 0002 12/06/17 15/06/17 0002 13/06/17 15/06/17 0002 14/06/17 15/06/17 0002 15/06/17 15/06/17 16 linhas selecionadas. SQL> ===> Isso *** nem de longe *** está com qualidade pronta pra Produção (entre outras coisas eu ** não ** estou Validando a porção hora da coluna date, assumo aqui que é sempre zero) mas é uma boa demonstração da técnica, que em si é bem simples: basicamente tenho um resultset gerando números de 1 a 60 (já que avalio que não haverá mais de 60 dias de gap entre a data início e a fim) e faço um join desse resultset com a tabela real, filtrando para só trazer as linhas onde o valor do número somado com o valor do número sequencial gerado está entre o início e o fim ... A minha lógica aqui confia no fato que (cfrme vc deve saber), no RDBMS Oracle somando números em item DATE vc avança o número de dias que somou na data Abraços, Chiappa
[oracle_br] SQL - Período - Datas
Boa tarde Pessoal preciso de ajuda. Tenho uma tabela (Oracle 11g): Tabela (Codigo,Nome,DataInicio,DataFim) Exemplo dos dados: 0001, ‘Nome Teste 0001’, 01/05/2017, 10/05/2017 0002, ‘Nome Teste 0002’, 10/06/2017, 15/06/2017 Eu preciso que o SQL me retorne da seguinte maneira 0001, ‘Nome Teste 0001’, 01/05/2017, 10/05/2017 0001, ‘Nome Teste 0001’, 02/05/2017, 10/05/2017 0001, ‘Nome Teste 0001’, 03/05/2017, 10/05/2017 0001, ‘Nome Teste 0001’, 04/05/2017, 10/05/2017 0001, ‘Nome Teste 0001’, 05/05/2017, 10/05/2017 0001, ‘Nome Teste 0001’, 06/05/2017, 10/05/2017 0001, ‘Nome Teste 0001’, 07/05/2017, 10/05/2017 0001, ‘Nome Teste 0001’, 08/05/2017, 10/05/2017 0001, ‘Nome Teste 0001’, 09/05/2017, 10/05/2017 0001, ‘Nome Teste 0001’, 10/05/2017, 10/05/2017 0002, ‘Nome Teste 0002’, 11/06/2017, 15/06/2017 0002, ‘Nome Teste 0002’, 12/06/2017, 15/06/2017 0002, ‘Nome Teste 0002’, 13/06/2017, 15/06/2017 0002, ‘Nome Teste 0002’, 14/06/2017, 15/06/2017 0002, ‘Nome Teste 0002’, 15/06/2017, 15/06/2017 Ou seja, o sequencial do período de cada linha Desde já agradeço Marcos