Brunerd 0 Denunciar post Postado Outubro 28, 2013 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
allex_carvalho 124 Denunciar post Postado Outubro 28, 2013 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
Brunerd 0 Denunciar post Postado Outubro 28, 2013 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
Motta 645 Denunciar post Postado Outubro 28, 2013 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
Brunerd 0 Denunciar post Postado Outubro 28, 2013 supondo tabela--------data_dedata_atese 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
Motta 645 Denunciar post Postado Outubro 28, 2013 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
Brunerd 0 Denunciar post Postado Outubro 28, 2013 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
Motta 645 Denunciar post Postado Outubro 28, 2013 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
Brunerd 0 Denunciar post Postado Outubro 28, 2013 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
Motta 645 Denunciar post Postado Outubro 28, 2013 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
Brunerd 0 Denunciar post Postado Outubro 28, 2013 Na verdade tenho que abranger os dois casos! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 28, 2013 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
Brunerd 0 Denunciar post Postado Outubro 28, 2013 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
Motta 645 Denunciar post Postado Outubro 28, 2013 Funcionou, deixa quieto ... :) Compartilhar este post Link para o post Compartilhar em outros sites