Jump to content


Photo

Comparação De 2 Datas


  • Faça o login para participar
14 replies to this topic

#1 rafael50

rafael50

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Não informado

Posted 10/01/2011, 13:46

Estou fazendo um sistema de reservas, e me deparei com uma dúvida.
No sql já fiz consultas usando o between para comparar 2 campos diferentes!

Tenho 2 campos de datas, IN e OUT.
Preciso verificar se uma data está disponivel, por exemplo: tenho no meu BD as datas 10/01 a 15/01. Preciso fazer uma consulta e ver se na data de 13/01 a 15/01 tenho algo registrado no BD.

Valeu, obrigado a todos.

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 10/01/2011, 13:50

WHERE '2011-01-13' BETWEEN Entrada AND Saida


#3 rafael50

rafael50

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Não informado

Posted 10/01/2011, 14:11

são 2 datas.... não faz sentido assim.

Edição feita por: rafael50, 10/01/2011, 14:11.


#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 10/01/2011, 14:38

Agora entendi. Temos quatro tipos de colisões:

10 | 11 | 12 | 13 | 14 | 15              Registro do Banco
 8 | 9 | 10 | 11 | 12 | 13                        Consulta 1
                   12 | 13 | 14 | 15 | 16 | 17    Consulta 2
              11 | 12 | 13                        Consulta 3
 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17    Consulta 4

WHERE ($Data1 <= Entrada AND $Data2 BETWEEN Entrada AND Saida) OR
($Data2 >= Saida AND $Data1 BETWEEN Entrada AND Saida) OR
($Data1 >= Entrada AND $Data2 <= Saida) OR
($Data1 <= Saida AND $Data2 >= Entrada)

Veja se vai.

#5 rafael50

rafael50

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Não informado

Posted 10/01/2011, 15:00

é isso mesmo o pensamento! vou ver a sql e ja posto aqui!
valeuu!

funcionou, mas nao está 100%. dificil de explicar aqui o pq!

um dos problemas: quando a reserva for do dia 15 a 17 ! essa consulta retorna 4 registros! baseado no q vc escreveu acima !

Edição feita por: rafael50, 10/01/2011, 15:15.


#6 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 10/01/2011, 15:26

Mas você só quer saber se tem registro e não quantos tem, não? E esse WHERE não pode multiplicar os registros. Precisa mostrar a query completa.

#7 rafael50

rafael50

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Não informado

Posted 10/01/2011, 15:38

a "problematica" é a seguinte:

Posted Image

eu queria q a query retornace 0 ou 1 para quando for invalida ou valida a consulta! será q da p fazer isso em, uma query soh ?

Edição feita por: rafael50, 10/01/2011, 15:40.


#8 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 10/01/2011, 16:08

Ah, o problema é só com os = então.

Espera aí... Já escrevo.

---

Sobre o 0 e 1, pode tentar:

SELECT EXISTS(<sua query aqui>)

Edição feita por: LeoB, 10/01/2011, 16:13.


#9 rafael50

rafael50

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Não informado

Posted 10/01/2011, 16:21

valeu

#10 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 10/01/2011, 16:26

WHERE ($Data1 <= Entrada AND $Data2 > Entrada) OR
($Data1 < Saida AND $Data2 > Saida) OR
($Data1 >= Entrada AND $Data2 <= Saida) OR
($Data1 <= Entrada AND $Data2 => Saida)

Tenta assim.

#11 rafael50

rafael50

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Não informado

Posted 10/01/2011, 16:41

entao assim nao funcionou!

select count(*) as total FROM ib_reservas WHERE ('2011/01/10' <= reserva_dtIn AND '' > reserva_dtIn) OR ('2011/01/10' < reserva_dtOut AND '' > reserva_dtOut) OR ('2011/01/10' >= reserva_dtIn AND '' <= reserva_dtOut) OR ('2011/01/10' <= reserva_dtIn AND '' >= reserva_dtOut)


o retorno eu uso um count(*) será ?

#12 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 10/01/2011, 16:57

Saiu '' no lugar da segunda data...

#13 rafael50

rafael50

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Não informado

Posted 10/01/2011, 17:41

Saiu '' no lugar da segunda data...



é verdade, to dando uma testada, ja posto aki !
valeuuuu

entao, parece deu certo sim caraaa !! tentei tdas as possibilidades aqui, to fazendo o select retornar um count(*) mesmo, se retornar um valor > 0 é pq nao da p fazer a reserva no periodo !
brigadaoo caraaa!!! quando eu finalizar te mostro !

Edição feita por: rafael50, 10/01/2011, 17:44.


#14 _Samuca_

_Samuca_

    samuelmachado.com

  • Usuários
  • 1062 posts
  • Sexo:Masculino
  • Localidade:São Bento do Sul - SC

Posted 12/01/2011, 22:35

pergunta...

um NOT BETWEEN não resolveria?


...
WHERE $dat_ini_reserva NOT BETWEEN entrada AND saida
 	OR $dat_fim_reserva NOT BETWEEN entrada AND saida
...

--
Samuel Machado
www.samuelmachado.com

#15 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 13/01/2011, 01:36

Na verdade, por esse raciocínio deveria ser só o BETWEEN, sem o NOT, porque queremos selecionar os conflitos. De qualquer modo, não resolve completamente porque não pegaria o quarto caso, além de gerar problemas para reservas em que a entrada de uma bata com a saída da outra, já que o BETWEEN compara como maior/menor ou igual.




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq