Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Brunerd

Consultar data entre período.

Recommended Posts

Ola amigos, banco de dados não é minha especialidade então me surge esta duvida: \Preciso verificar se uma data esta dentro de um periodo já gravado anteriormente no banco. Existe algum comando para isso...? P q preciso gravar as informações mas se o periodo já estiver gravado devo barrar o usuário.

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verificar intervalo use o BETWEEN.

 

SELECT * FROM `clientes` WHERE `data_cadastro` BETWEEN '2013-01-01' AND '2013-01-31'

Lembrando que para usar o between os campos para comparação precisam ser date.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Es a questão amigo, eu preciso que ele compare não uma data dentro de um periodo... e sim se um periodo sobrepõe outro...

exemplo eu tenho o gravado intervalo.... 2012-01-05 e 2012-01-10 ... se a criatura digitar 2012-01-03 e 2012-01-15 deve retornar algum resultado por que um período sobrepõe outro. ou mesmo que ele digite 2011-12-30 e 2012-01-02.... ou 2011-12-30 e 2012-01-06...

 

Espero que tenha facilitado a compreenção.



Acho q não soube explicar na primeira msg :P mas acho q agora da pra entender a real duvida...

Compartilhar este post


Link para o post
Compartilhar em outros sites

supondo

 

 

tabela
--------
data_de
data_ate

se quer testar o intervalo '01/10/2013' a '29/10/2013'

 

faca

 

 

select *
from tabela
where (('01/10/2013' between data_de and data_ate) 
       or
       ('29/10/2013' between data_de and data_ate))

 

Ajudou ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

supondo

 

 

tabela--------data_dedata_ate
se quer testar o intervalo '01/10/2013' a '29/10/2013'

 

faca

 

select *from tabelawhere (('01/10/2013' between data_de and data_ate)        or       ('29/10/2013' between data_de and data_ate))

Ajudou ?

 

 

Amigo agradeço a ajuda mas ainda assim o problema persiste: exemplo:

 

Suponhamos que possuo essas datas cadastradas nos campos data_de = '2013-10-10' e data_ate = '2013-10-20' e o usuario utiliza o seguinte periodo :2013-10-01 à 2013-10-25...

repare que o periodo que o usuario digitou sobrepõe o que esta no banco de dados mas:

 

 

select * 
from tabela
where (
         ('2013-10-01' between data_de and data_ate) OR       
         ('2013-10-25' between data_de and data_ate)
      )

 

Nenhum das instruções retornaria true...

 

('2013-10-01' between 2013-10-10' AND '2013-10-20')False
('2013-10-25' between 2013-10-10' AND '2013-10-20')False

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK , inverta faça

 

 

select * 
from tabela
where ((data_de between '2013-10-01' and '2013-10-25')
        or 
       (data_ate between '2013-10-01' and '2013-10-25'))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesma coisa, se o usuário digitar 2013-10-15 e 2013-10-17 vou ter 3 dias que sobrepõem o periodo já registrado 2013-10-10 e 2013-10-20..



E não vai retornar nenhum resultado tbm

Compartilhar este post


Link para o post
Compartilhar em outros sites

2012-01-05 - 2013-10-15 AND 2013-10-17

2012-01-10 - 2013-10-15 AND 2013-10-17

 

 

 

2012-01-05-2012-01-10 e 2013-10-15 2013-10-17 não se sobre põe ?!

 

Quais os valores

 

data de/ate gravadas

parametros de ate usuário ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Digamos que tenho o periodo gravado data_de = 2013-10-10 e data_ate = 2013-10-20 e o usuario digita 2013-10-15 e 2013-10-17

repare que as datas (2013-10-15 , 2013-10-16, 2013-10-17) estão contidas dentro do periodo ja cadastrado (data_de = 2013-10-10 e data_ate = 2013-10-20) porem nesse seu exemplo não retornaria nenhum registro.

 


 

select * 
from tabela 
where (
        (2013-10-10  between '2013-10-15' and '2013-10-17') OR 
        (2013-10-20  between '2013-10-15' and '2013-10-17')
      )

Compartilhar este post


Link para o post
Compartilhar em outros sites

caimos no #4 ...

 

 

select * from tabela where (('2013-10-15' between data_de and data_ate)               or        ('2013-10-17' between data_de and data_ate))

--

select * from tabela where (('2013-10-15' between '2013-10-10' and '2013-10-20')               or        ('2013-10-17' between '2013-10-10' and '2013-10-20'))

 

tenho quase certeza que o #4 funciona pois já fiz algo assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que o #4 basta

 

parametro_de between data_de and data_ate

or

parametro_ate between data_de and data_ate

 

Tinha um post aqui no Imasters que já se tinha discutido isto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz alguns testes aqui apenas com o exemplo #4 não funcionou devido ao que eu havia explicado, porem uni as duas condições com o operador OR e funcionou como esperado, obrigado pela ajuda amigo. Abraços e até.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.