Ir para conteúdo

POWERED BY:

Arquivado

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

André Severino

Selecionar 2 datas em um determinado tempo

Recommended Posts

Boa tarde pessoal, estou com uma duvida que é a seguinte.

 

Tenho uma tabela e nela tenho os 3 campos abaixo.

 

t_escala

 

fk_departamento | data_escalaEntrada | data_escalaSaida

 

10 - 2011-03-23 07:00:00 - 2011-03-23 19:00:00

10 - 2011-03-23 19:00:00 - 2011-03-24 07:00:00

10 - 2011-03-21 07:00:00 - 2011-03-21 19:00:00

10 - 2011-03-25 19:00:00 - 2011-03-23 07:00:00

 

Como percebe eu tenho a data com o horário de entrada e uma outra data com o horario de saida, eu gostaria de fazer o select em um determinado periodo entre essa datas.

Só que não estou conseguindo, faz quase 3 dias que estou tentando... e tentando, tentei usar o between mas não consegui também.

 

- O resultado seria algo assim

 

Eu seleciono que quero me cadastrar no departamento (id=10) no dia 24/03/2011 das 07:00:00 até as 19:00:00 horas. E como podem ver eu não tenho nenhum registro nesse horario.

Como eu faria esse select?

 

Se alguém puder me ajudar eu agradeço. :thumbsup:

 

Atenção, acho que consegui, mas de qualquer forma fica o topico, se alguem tiver outra solução posta.

 

// Instrução
"SELECT * FROM `t_escala` WHERE dataEntrada_escala BETWEEN '".$this->c_data_entrada."' AND '".$this->c_data_saida."'"

// Saída
SELECT *
FROM `t_escala`
 WHERE dataEntrada_escala
 BETWEEN '2011-1-2 7:00:00' AND '2011-1-2 19:00:00'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que falta pegar o intervalo :

 

SELECT *
FROM `t_escala`
 WHERE (dataEntrada_escala BETWEEN '2011-1-2 7:00:00' AND '2011-1-2 19:00:00'
        or
        data_escalaSaida BETWEEN '2011-1-2 7:00:00' AND '2011-1-2 19:00:00')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite motta, vou tentar fazer desta parece que pode funcionar afinal eu seleciono na entra e também vejo se tem alguma saida nesse horário.

 

Obrigado pela ajuda e até mais. Nunca trabalhei com manipulações de data e nossa parece ser mt complexo :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão é que você precisa trabalhar com dois intervalos um na tabela e outro na pesquisa e pode ocorrer o seguinte

 

-------------------xxxxxxxxxxxxxxxxxxxxxxxxxxx----------------------------- tabela
-----xxxx------------------------------------------------------------------ caso 1 pesquisa ambos fora
-------------------xxxxxxxxx----------------------------------------------- caso 2 pesquisa ambos dentro
-------------------------------------------xxxxxxx------------------------- caso 3 parcialmente dentro, parcialmente fora

 

Espero ter sido claro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Motta, realmente o jeito que você colocou está certo, mas não sei. Acredito que estou fazendo algo errado ou pensando em algo errado. Pois não consegui fazer o que realmente eu queria. :(

 

Bom é o seguinte seguindo a sua linha de raciocinio e com base nos registros eu tenho o seguinte:

 

-------------------xxxxxxxxxxxxxxxxxxxxxxxxxxx----------------------------- tabela
-----------------------xxxxxxxxxxxxxxxxxxx--------------------------------- caso 4 totalmente dentro do registro (não funciona)

 

Assim:

Eu tenho um registro: 2011-01-01 7:00:00 e saiu no mesmo dia as 19 ficando: 2011-01-01 19:00:00

Se eu tento inserir um registro das 6h as 18h ele retorna 1 registro (7:00 até as 19:00hrs): OK

-- Então eu exibo um alerta para o usuário, pois das 7 até as 19 já tem uma pessoa trabalhando.

 

Se eu tento inserir um registro das 8 as 18, ele retorna vazio, é isto que está me deixando 'intrigado', o certo seria ele retorna o registro das 7 até as 19?

 

Abaixo um modelo de como é

-----------------------7-8-9-10-11-12-13-14-15-16-17-18-19----------------------------- Registro
---------------------6-7-8-9-10-11-12-13-14-15-16-17-18-------------------------------- Ele retorna uma linha nesse periodo (OK)
-------------------------8-9-10-11-12-13-14-15-16-17-18-------------------------------- Aqui ele não retorna nada. (ERRO)

 

Será que tem como eu fazer uma validação no proprio mysql relacionado a esse tempo.

Ex: 2011-01-01 07:00:00 até 2011-01-01 19:00:00

 

Retornar 1 periodo nesse intervalo de tempo, mesmo que eu tenha que mudar os campos... :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pela minha sql

SELECT *
FROM `t_escala`
 WHERE (dataEntrada_escala BETWEEN '2011-1-2 7:00:00' AND '2011-1-2 19:00:00'
        or
        data_escalaSaida BETWEEN '2011-1-2 7:00:00' AND '2011-1-2 19:00:00')

 

Para o caso de (ERRO) deveria retornar TRUE !?

 

-----------------------7-8-9-10-11-12-13-14-15-16-17-18-19----------------------------- Registro
---------------------6-7-8-9-10-11-12-13-14-15-16-17-18-------------------------------- Ele retorna uma linha nesse periodo (OK)
-------------------------8-9-10-11-12-13-14-15-16-17-18-------------------------------- Aqui ele não retorna nada. (ERRO)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso, ele deveria retornar TRUE, pois já existe um periodo nesta data, agora não se se é possivel fazer isso com o sql.

 

Pois com o between ele seleciona datas apenas entre 7 e 19 no caso, + queria que fosse seleciona o periodo entre 7 e 19.

08 - 18
09 - 17
10 - 16

 

Acredito que confundi as bolas :( :( :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa ver se eu entendi , usuário A tenta fazer um cadastro no intervalo 8 a 18 de uma data, o Sistema deve checar se este horário já está ocupado na tabela.

 

Se estiver ocupado retorna erro, senão insere.

 

Pelo que vejo a query retorna esta validação.

 

Qual o problema ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto ele retorna, mas se eu inserir das 8 as 18 ele não retorna o registro.

Ex.

 

-----------------------7-8-9-10-11-12-13-14-15-16-17-18-19----------------------------- Registro(banco de dados)
-------------------------8-9-10-11-12-13-14-15-16-17-18-------------------------------- Usuario quer cadastrar nesse intervalo

 

Se eu fizer o between assim:

SELECT *
FROM `t_escala`
 WHERE (dataEntrada_escala BETWEEN '2011-1-2 8:00:00' AND '2011-1-2 18:00:00'
        or
        data_escalaSaida BETWEEN '2011-1-2 8:00:00' AND '2011-1-2 18:00:00')

 

Ele vai retornar NULL, pois não existe nenhum valor entre 8 e 18, mas na verdade existe sim... das 7 até as 19.

Entendeu?

 

Não sei se é possivel fazer esse calculo apenas usando a instrução SQL.

 

Obrigado pelas dica e a paciencia e até mais :thumbsup:

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.