Ir para conteúdo

POWERED BY:

Arquivado

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

Paulo Freitas Nobrega

BETWEEN não funciona de maneira esperada

Recommended Posts

Bom dia pessoal! http://forum.imasters.com.br/public/style_emoticons/default/shifty.gif

 

Estou tentando fazer uma consulta SQL para um hotel. Nesse script o usuário realiza a tarefa de informar a data de chegada e data de partida. As mesmas são confrontadas com os registros já cadastrados no banco de dados, para saber se existe apartamentos disponíveis entre as datas sugeridas.

 

Na consulta que venho tendo problema quero retornar os registros que possuem a "Data Inicial" entre as datas de entrada/partida sugeridas pelo usuário ou a "Data Final" entre as datas de entrada/partida sugeridas pelo usuário. Para isso fiz a seguinte linha de código:

 

$sql = "SELECT * FROM $TB_RSV_Reserv WHERE startDate BETWEEN '$start' AND '$end' OR endDate BETWEEN '$start' AND '$end'";

Para que entendam o problema vou fazer duas simulações:

 

Datas digitadas pelo usuário: 30/08/2009 - 30/08/2009;

Considerando os registros do banco:

  • 30/08/2009 - 30/08/2009
  • 31/08/2009 - 03/09/2009
  • 30/08/2009 - 31/08/2009

Nesta consulta deveria ser retornados os itens (1,3), mas ela está me retornando todos os itens, ou seja (1,2,3)

 

Outra simulação é a seguinte:

Considere os registro do banco citados acima.

 

Se o usuário digitar 31/08/2009 - 03/09/2009, o registro (2) é exibido, mas se digitar 01/09/2009 - 03/09/2009 não é exibido nada.

Se alguém puder me dar um dica de como resolver esta consulta fico feliz.

Até +

 

Fiz outros teste usando apenas SELECT * FROM $TB_RSV_Reserv WHERE startDate BETWEEN '$start' AND '$end' e mesmo assim continua o erro!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim:

SELECT * 
FROM $TB_RSV_Reserv 
WHERE startDate BETWEEN ('$start' AND '$end') 
   OR endDate   BETWEEN ('$start' AND '$end');

não retornou nada. Dei um echo na $sql:

SELECT * FROM rsv_reserv WHERE startDate BETWEEN ('2009-08-30' AND '2009-08-30') OR endDate BETWEEN ('2009-08-30' AND '2009-08-30')

Registros da coluna:

INSERT INTO `rsv_reserv` (`id`, `startDate`, `endDate`, `client`, `fourth`, `status`, `addition`, `myDate`, `myHour`) VALUES
(18, '2009-08-30', '2009-08-30', '3', '1', '2', '', '2009-08-26', '09:50:35'),
(19, '2009-08-30', '2009-08-30', '3', '2', '2', '', '2009-08-26', '09:49:47'),
(20, '2009-08-30', '2009-08-31', '11', '5', '2', '', '2009-08-26', '09:44:55');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o teste com o id e funcionou perfeitamente:

$sql = "SELECT * FROM $TB_RSV_Reserv WHERE id BETWEEN '19' AND '20'";

Outra interação: este também da certo:

$sql = "SELECT * FROM $TB_RSV_Reserv WHERE endDate BETWEEN '$start' AND '$end'";

pensei que poderia ser o nome do campo então alterei de startDate para stDate, mas o erro continua

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT *

FROM rsv_reserv

WHERE

startDate BETWEEN '2009-08-30' AND '2009-08-30'

OR

endDate BETWEEN '2009-08-30' AND '2009-08-30'

Compartilhar este post


Link para o post
Compartilhar em outros sites

A consulta do giesta esta correta, a sua primeira também está,

 

Verifique se o tipo dos seus campos startDate e endDate são do tipo date...

 

É o unico motivo que penso q poderia estar te causando este transtorno, testei sua consulta aki em tabelas semelhante e deu certinho

 

Abraç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.