Ir para conteúdo

Arquivado

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

Cyberoma

[Resolvido] Registros no intervalo de 2 datas

Recommended Posts

Boa noite amigos, estou precisando da ajuda de vocês.

 

Tenho uma tabela chamada FERIAS, com os campos: id, profissional_id, data_inicio, data_fim

 

E tenho outra tabela chamada LICENÇA MEDICA, mas que não vem ao caso.

 

Em uma pagina ASP, o líder iria lançar a Licença Medica através dos campos "text" data inicio e data fim.

 

O caso é que eu não posso lançar uma Licença Medica para um profissional que está de Férias.

 

Daí eu pensei em fazer um select onde ele traria se tem alguma férias para o profissional naquele intervalo de datas que o líder colocou.

 

 

Então eu não sei como fazer esse select com 2 campos datas.

 

Vocês poderiam me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite amigo,

 

Se entendi direito o que você precisa, é bem simples. Suponha:

 

- Tabela FERIAS com campos: idFerias, idProfissional. dataInicio e dataFim.

- Tabela LICENCA com campos: idLicensa, idProfissional, dataInicio e dataFim.

 

Você usuário digitou uma licença para o profissional 7 com início em 15/10/2012 e fim em 15/11/2012. Basta fazer um SELECT mais ou menos assim:

 

SELECT 1 FROM ferias f
WHERE ((f.dataInicio BETWEEN '15/10/2012' AND '15/11/2012') OR (f.dataFim BETWEEN '15/10/2012' AND '15/11/2012'))
AND f.idProfissional = 7

Essa consulta retornará 1 caso haja férias programadas para começar ou terminar entre o prazo que você digitou pra licença. Faça ajustes caso necessário.

 

Veja as funções de hora e data do MySQL.

 

Em caso de dúvidas sinta-se a vontade para perguntar. Espero que seja útil, abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite amigo,

 

Se entendi direito o que você precisa, é bem simples. Suponha:

 

- Tabela FERIAS com campos: idFerias, idProfissional. dataInicio e dataFim.

- Tabela LICENCA com campos: idLicensa, idProfissional, dataInicio e dataFim.

 

Você usuário digitou uma licença para o profissional 7 com início em 15/10/2012 e fim em 15/11/2012. Basta fazer um SELECT mais ou menos assim:

 


SELECT 1 FROM ferias f
WHERE ((f.dataInicio BETWEEN '15/10/2012' AND '15/11/2012') OR (f.dataFim BETWEEN '15/10/2012' AND '15/11/2012'))
AND f.idProfissional = 7


Essa consulta retornará 1 caso haja férias programadas para começar ou terminar entre o prazo que você digitou pra licença. Faça ajustes caso necessário.

 

Veja as funções de hora e data do MySQL.

 

Em caso de dúvidas sinta-se a vontade para perguntar. Espero que seja útil, abraço.

 

Diego obrigado por me ajudar.. Você entendeu o que estou precisando, precisa apenas de um ajuste:

 

A data_inicio OU data_fim que esteja dentro do intervalo no select ele trás certinho, mas se caso os data_inicio E data_fim estiverem dentro do intervalo ele não trás nada.

 

Vou explicar melhor, usando sua consulta (Mudei as datas).

 

Digamos que eu tenha o Registro:

 

id = 1

profissional_id = 7

data_inicio = 05/10/2012

data_fim = 15/10/2012

 

E use a consulta:

SELECT 1 FROM ferias f
WHERE ((f.dataInicio BETWEEN '05/10/2012' AND '15/10/2012') OR (f.dataFim BETWEEN '05/10/2012' AND '15/10/2012'))
AND f.idProfissional = 7

 

TRAS O REGISTRO CERTO

 

Caso eu coloque a data_inicio menor que a do registro:

SELECT 1 FROM ferias f
WHERE ((f.dataInicio BETWEEN '02/10/2012' AND '15/10/2012') OR (f.dataFim BETWEEN '02/10/2012' AND '15/10/2012'))
AND f.idProfissional = 7

 

TRAS O REGISTRO CERTO

 

Caso eu coloque a data_fim maior que a do registro:

SELECT 1 FROM ferias f
WHERE ((f.dataInicio BETWEEN '05/10/2012' AND '17/10/2012') OR (f.dataFim BETWEEN '05/10/2012' AND '17/10/2012'))
AND f.idProfissional = 7

TRAS O REGISTRO CERTO

 

 

Mas caso eu coloque a data_inicio e a data_fim dentro do intervalo do registro:

SELECT 1 FROM ferias f
WHERE ((f.dataInicio BETWEEN '07/10/2012' AND '10/10/2012') OR (f.dataFim BETWEEN '07/10/2012' AND '10/10/2012'))
AND f.idProfissional = 7

 

ELE NÃO TRAS NADA.

 

Precisa ajustar somente isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Huuuum entendi, realmente ficou um ponto cego na consulta.

 

Vejamos...

 

Acho que adicionar um OR ('data de inicio da licenca' BETWEEN f.dataInicio AND f.dataFim) OR ('data de fim da licenca' BETWEEN f.dataInicio AND f.dataFim) fica show. Veja:

 

Conforme passado por você:

 

Mas caso eu coloque a data_inicio e a data_fim dentro do intervalo do registro:

SELECT 1 FROM ferias f
WHERE ((f.dataInicio BETWEEN '07/10/2012' AND '10/10/2012') OR (f.dataFim BETWEEN '07/10/2012' AND '10/10/2012'))
AND f.idProfissional = 7

 

ELE NÃO TRAS NADA.

 

Precisa ajustar somente isso.

Nova query com todas as 4 condições:

 

SELECT 1 FROM ferias f
WHERE 
   (
       (f.dataInicio BETWEEN '07/10/2012' AND '10/10/2012') OR 
       (f.dataFim    BETWEEN '07/10/2012' AND '10/10/2012') OR 
       ('07/10/2012' BETWEEN f.dataInicio AND f.dataFim   ) OR 
       ('10/10/2012' BETWEEN f.dataInicio AND f.dataFim   )
   )
AND f.idProfissional = 7

Entendeu? Creio que resolva. Tinha pensado em algo usando a função DATEDIFF também mas assim ficou mais simples. Caso não resolva podemos tentar a outra maneira.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Huuuum entendi, realmente ficou um ponto cego na consulta.

 

Vejamos...

 

Acho que adicionar um OR ('data de inicio da licenca' BETWEEN f.dataInicio AND f.dataFim) OR ('data de fim da licenca' BETWEEN f.dataInicio AND f.dataFim) fica show. Veja:

 

Conforme passado por você:

 

 

Nova query com todas as 4 condições:

 

SELECT 1 FROM ferias f
WHERE 
   (
       (f.dataInicio BETWEEN '07/10/2012' AND '10/10/2012') OR 
       (f.dataFim    BETWEEN '07/10/2012' AND '10/10/2012') OR 
       ('07/10/2012' BETWEEN f.dataInicio AND f.dataFim   ) OR 
       ('10/10/2012' BETWEEN f.dataInicio AND f.dataFim   )
   )
AND f.idProfissional = 7

Entendeu? Creio que resolva. Tinha pensado em algo usando a função DATEDIFF também mas assim ficou mais simples. Caso não resolva podemos tentar a outra maneira.

 

Abraço.

 

Diego é exatamente isso. :clap:

 

Ficou perfeito..

 

Agora sim ele pega se o profissional está de férias ou não.

 

Pow cara muito obrigado mesmo pela sua ajuda..

 

Um abraço irmão.

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.