Ir para conteúdo

POWERED BY:

Arquivado

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

Sergio.Anjos

Problemas numa consulta no SQL Server

Recommended Posts

Olá,

 

 

Estranhamente a consulta abaixo começou a retornar resultados errados.

Explicando: eu preciso retornar a quantidade de pessoas que fizeram reservas um dado período do ano, neste caso, o período é 04/01/2014 e 05/01/2014, e, para isso, eu utilizo as seguintes colunas [data entrada] e [data saída]

 

Eis a consulta:

 

SELECT CodHotel,[Data Entrada], [Data Saida], Status
FROM Utilizacao
WHERE ((codHotel='Caraguá' AND status='Reservado') and
      ([Data Entrada] Between '01/04/2014' And '01/05/2014') or
      ([Data Saida]   Between '01/04/2014' And '01/05/2014')  or
      ([Data Entrada] <'01/04/2014' AND [Data Saida] >='01/05/2014'))

 

 

Eis uma prévia do resultado, para terem uma ideia:

 

 

CodHotel        Data Entrada      Data Saida        Status

Caraguá          2014-01-04        2014-01-09       Reservado
Caraguá          2014-01-03        2014-01-09       Cancelado
Solemar          2013-01-04        2014-01-12       NULL
Clube             2014-01-03       2014-01-05       Reservado

 

 

Percebam que o SQL não está obedecendo a restrição codHotel='Caraguá' AND status='Reservado'.

 

O que será que está havendo? O sistema funcionava perfeitamente.

 

 

Windows Server 2008 R2

SQL Server 2012

 

Sérgio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta com um parenteses entre as datas de forma incorreta.

Coloque os parametros de data dentro de um unico parenteses, como exemplo:

 

declare @Utilizacao table (CodHotel         varchar(max), [Data Entrada] datetime,      [Data Saida] datetime,        Status varchar(max)) insert into @utilizacao values ('Caraguá','2014-01-04','2014-01-09','Reservado')insert into @utilizacao values ('Caraguá','2014-01-03','2014-01-09','Cancelado')insert into @utilizacao values ('Solemar','2013-01-04','2014-01-12  ',NULL)insert into @utilizacao values ('Clube','2014-01-03','2014-01-05','Reservado')  SELECT CodHotel,[Data Entrada], [Data Saida], StatusFROM @UtilizacaoWHERE ((codHotel='Caraguá' AND status='Reservado') and (([Data Entrada] Between '01/04/2014' And '01/05/2014') or  ([Data Saida]   Between '01/04/2014' And '01/05/2014')  or  ([Data Entrada] <'01/04/2014' AND [Data Saida] >='01/05/2014')))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, A.Jr.

 

O parenteses estava mesmo errado, mas esta não é a consulta que está em produção, cometi o erro fazendo testes aqui.

 

Bom, eu peguei a consulta que você editou e fiz um teste, no entanto, os dados estão sendo retornados errados; a consulta retornou menos linhas do que deveria retornar, ela deveria ter retornado 30 linhas e somente retornou 12.

Como eu sei disso? Porque eu contei todas as linhas da tabela que satisfazem o critério.

 

Vc faz ideia do que possa estar ocorrendo?

 

Sérgio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sérgio, foi alterado algo na estrutura das tabelas como collation ou algo assim?

O que pode estar realmente acontecendo é esta consulta sua. Estes parenteses são um terror para qq um.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A.Jr, obrigado por dispor do seu tempo.

 

O problema era com uma tabela que não estava sendo replicada corretamente para o SQL Server

 

Problema solucionado!.

 

Att,

Sérgio

Vlw pelo feeback! :clap:

Abçs

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.