Uncategorized

SQL para verificar períodos – Verificar período dentro de período em SQL

Para verificar períodos entre datas, o bet

if (this.filtro.isUsaDatas()) {
Date dateInicialSemHora = DateUtils.getDateSemHora(filtro.getDtInicio());
Date dataFinalUltimaHora = DateUtils.highDateTime(filtro.getDtFinal());
sql.appendFiltro(” and ( “);
sql.appendFiltro(” ( ? between dtprevista and dtPrevistaTermino ) “, dateInicialSemHora);
sql.appendFiltro(” OR ( dtprevista between ? and ? )”, dateInicialSemHora, dataFinalUltimaHora);
sql.appendFiltro(” ) “);
}

 

drop table esgptemp_joao;

create table esgptemp_joao (
cd decimal (2,0),
dataini date,
datafim date
);

delete from esgptemp_joao;
insert into esgptemp_joao values (1,TO_DATE(’01/04/2014′, ‘dd/mm/yyyy’), TO_DATE(’03/04/2014′, ‘dd/mm/yyyy’));
insert into esgptemp_joao values (2,TO_DATE(’03/04/2014′, ‘dd/mm/yyyy’), TO_DATE(’08/04/2014′, ‘dd/mm/yyyy’));
insert into esgptemp_joao values (3,TO_DATE(’12/04/2014′, ‘dd/mm/yyyy’), TO_DATE(’20/04/2014′, ‘dd/mm/yyyy’));

insert into esgptemp_joao values (4,TO_DATE(’20/04/2014′, ‘dd/mm/yyyy’), TO_DATE(’21/04/2014′, ‘dd/mm/yyyy’));
insert into esgptemp_joao values (5,TO_DATE(’21/04/2014′, ‘dd/mm/yyyy’), TO_DATE(’06/05/2014′, ‘dd/mm/yyyy’));
insert into esgptemp_joao values (6,TO_DATE(’09/05/2014′, ‘dd/mm/yyyy’), TO_DATE(’12/05/2014′, ‘dd/mm/yyyy’));

insert into esgptemp_joao values (7,TO_DATE(’12/06/2014′, ‘dd/mm/yyyy’), TO_DATE(’15/06/2014′, ‘dd/mm/yyyy’));

/*testa selecionar o primeiro periodo completo: espera registros 1*/
select * from esgptemp_joao h where 1=1
and ((H.dataini >= TO_DATE(’01/04/2014′, ‘dd/mm/yyyy’) AND H.dataini TO_DATE(’01/04/2014′, ‘dd/mm/yyyy’) AND H.datafim <= TO_DATE(’03/04/2014′, ‘dd/mm/yyyy’)) OR
(H.dataini = TO_DATE(’03/04/2014′, ‘dd/mm/yyyy’)));

/*testa selecionar um periodo entre 01/04/2014 e 08/04/2015: espera registros 1, 2*/
select * from esgptemp_joao h where 1=1
and ((H.dataini >= TO_DATE(’01/04/2014′, ‘dd/mm/yyyy’) AND H.dataini TO_DATE(’01/04/2014′, ‘dd/mm/yyyy’) AND H.datafim <= TO_DATE(’08/04/2014′, ‘dd/mm/yyyy’)) OR
(H.dataini = TO_DATE(’08/04/2014′, ‘dd/mm/yyyy’)));

/*testa selecionar um periodo entre 02/04/2014 e 09/04/2015: espera registros 1,2 */
select * from esgptemp_joao h where 1=1
and ((H.dataini >= TO_DATE(’02/04/2014′, ‘dd/mm/yyyy’) AND H.dataini TO_DATE(’02/04/2014′, ‘dd/mm/yyyy’) AND H.datafim <= TO_DATE(’09/04/2014′, ‘dd/mm/yyyy’)) OR
(H.dataini = TO_DATE(’09/04/2014′, ‘dd/mm/yyyy’)));

/*testa selecionar um periodo entre 09/04/2014 e 11/04/2015: espera nenhum registro*/
select * from esgptemp_joao h where 1=1
and ((H.dataini >= TO_DATE(’09/04/2014′, ‘dd/mm/yyyy’) AND H.dataini TO_DATE(’09/04/2014′, ‘dd/mm/yyyy’) AND H.datafim <= TO_DATE(’11/04/2014′, ‘dd/mm/yyyy’)) OR
(H.dataini = TO_DATE(’11/04/2014′, ‘dd/mm/yyyy’)));

/*testa selecionar um periodo entre 08/04/2014 e 12/04/2015: espera nenhum registro*/
select * from esgptemp_joao h where 1=1
and ((H.dataini >= TO_DATE(’08/04/2014′, ‘dd/mm/yyyy’) AND H.dataini TO_DATE(’08/04/2014′, ‘dd/mm/yyyy’) AND H.datafim <= TO_DATE(’12/04/2014′, ‘dd/mm/yyyy’)) OR
(H.dataini = TO_DATE(’12/04/2014′, ‘dd/mm/yyyy’)));

/*testa selecionar um periodo entre 24/04/2014 e 03/05/2015: espera registro 5*/
select * from esgptemp_joao h where 1=1
and ((H.dataini >= TO_DATE(’24/04/2014′, ‘dd/mm/yyyy’) AND H.dataini TO_DATE(’24/04/2014′, ‘dd/mm/yyyy’) AND H.datafim <= TO_DATE(’03/05/2014′, ‘dd/mm/yyyy’)) OR
(H.dataini = TO_DATE(’03/05/2014′, ‘dd/mm/yyyy’)));

/*testa selecionar um periodo entre 01/06/2014 e 30/06/2015: espera registro 7*/
select * from esgptemp_joao h where 1=1
and ((H.dataini >= TO_DATE(’01/06/2014′, ‘dd/mm/yyyy’) AND H.dataini TO_DATE(’01/06/2014′, ‘dd/mm/yyyy’) AND H.datafim <= TO_DATE(’30/06/2014′, ‘dd/mm/yyyy’)) OR
(H.dataini = TO_DATE(’30/06/2014′, ‘dd/mm/yyyy’)));

Anúncios
Padrão

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s