Pular para o conteúdo principal

Como fazer uma SQL para buscar os períodos de tempo que coincidem com um novo período?

Existem tabelas que controlam períodos de utilização, como aluguéis ou viagens, onde há um campo para a data inicial e outra para a final.

Nestes casos, é muito comum se verificar, ao inserir um novo item, se este coincide com algum já cadastrado. Para isso execute a SQL abaixo adaptada ao seu caso:

select id, dt_hr_saida, dt_hr_chegada from viagem
where dt_hr_chegada > 'dt_hr_saida_novo'
and dt_hr_saida < 'dt_hr_chegada_novo'

Esta SQL irá retornar todos os períodos coincidentes.

Veja que usei o maior e menor, pois as pontas podem coincidir, mas não se cruzar. Se o seu caso não pode nem coincidir então utilize >= e <=.

Se na edição do dado deseja saber se vai bater com outro período execute a SQL abaixo adaptada ao seu caso:

select id, dt_hr_saida, dt_hr_chegada from viagem
where dt_hr_chegada > 'dt_hr_saida_editando'
and dt_hr_saida < 'dt_hr_chegada_editando'
and id <> id_editando

É isso aí....


Comentários

Postagens mais visitadas deste blog

Lista de órgãos emissores de RG

Para quem quiser normalizar os órgãos emissores de RG, aí vai uma lista retirada do site da FGV: SSP - Secretaria de Segurança Pública PM - Polícia Militar PC - Policia Civil CNT - Carteira Nacional de Habilitação DIC - Diretoria de Identificação Civil CTPS - Carteira de Trabaho e Previdência Social FGTS - Fundo de Garantia do Tempo de Serviço IFP - Instituto Félix Pacheco IPF - Instituto Pereira Faustino IML - Instituto Médico-Legal MTE - Ministério do Trabalho e Emprego MMA - Ministério da Marinha MAE - Ministério da Aeronáutica MEX - Ministério do Exército POF - Polícia Federal POM - Polícia Militar SES - Carteira de Estrangeiro SJS - Secretaria da Justiça e Segurança SJTS - Secretaria da Justiça do Trabalho e Segurança ZZZ - Outros (inclusive exterior)

Comparar dois números float em PHP

Para não passar raiva comparando dois números float com PHP nunca faça algo do tipo abaixo: $a = 0.1; $b = 0.2; if ($a + $b == 0.3) {     echo 'Igual'; } else {     echo 'Diferentes'; } Se fizer isso, vai ver que dá problema devido ao modo como o PHP guarda os valores float. Para resolver isso criei a função abaixo para comparar dois valores do tipo float. /** * Esta função recebe dois números como parâmetro.   * Se os números forem iguais, ou seja, se a diferença  * entre eles for menor que a margem de erro aceitável,   * a função retorna 0, caso contrário retorna -1 se o  * primeiro número for menor, * ou então 1 caso o segundo  * seja o menor   * @param float $a   * @param float $b   * @return 0 (igual), -1($num1 menor), 1($num2 menor)   */ function compara_float( $num1 , $num2 , $precisao = 5 ) {   $desprezar = pow ( 0.1 , $precisao );   $diff = abs ( $num1 - $...