GARANTIR DESCONTO

Fórum Problema com consulta SQL no Delphi e Banco de dados #493018

21/09/2014

0

Então, estou com um problema no retorno de uma consulta em SQL. Eu achava que era no Delphi, mas rodei direto no Mysql e deu o mesmo erro. Vamos lá...

select * from contaspagar where data_cadastro >= '2014-09-01' and data_cadastro <= '2014-09-15' and situacao = 'Paga' or situacao = 'Cancelada'
select * from contaspagar where data_cadastro >= '2014-09-01' and data_cadastro <= '2014-09-15' and situacao = 'Aberta' or situacao = 'Cancelada'

Estas linhas acima retornam corretamente o resultado da consulta.

Agora se eu coloco: select * from contaspagar where data_cadastro >= '2014-09-01' and data_cadastro <= '2014-09-15' and situacao = 'Paga' or situacao = 'Aberta', é retornado todos os registro da tabela e se eu "inverter" o Aberta e o Paga ficando assim: select * from contaspagar where data_cadastro >= '2014-09-01' and data_cadastro <= '2014-09-15' and situacao = 'Aberta' or situacao = Paga' o resultado da consulta retorna corretamente. Calma tem mais!

Colocando dessa forma: select * from contaspagar where data_cadastro >= '2014-09-01' and data_cadastro <= '2014-09-15' and situacao = 'Aberta' or situacao = Paga' ele passa a retornar corretamente, mas se eu mudar o critério de pesquisa de data_cadastro para data_vencimento ou data_pagamento aí novamente passa a retornar todos os registros.

O que pode esta acontecendo?
Pedro

Pedro

Responder

Posts

22/09/2014

Rafael Cunha

Bom Dia!

Tente realizar a consulta conforme exemplo abaixo:

select * from contaspagar where (data_cadastro between '2014-09-01' and '2014-09-15') and (situacao in ('Paga', 'Aberta'))
Responder

Gostei + 0

22/09/2014

Pedro

Bom Dia!

Tente realizar a consulta conforme exemplo abaixo:

select * from contaspagar where (data_cadastro between '2014-09-01' and '2014-09-15') and (situacao in ('Paga', 'Aberta'))


Amigo Rafael, muito obrigado mesmo! Essa forma como você passou funcionou certinho direto no mysql, vou passar para o Delphi e passar as datas como parâmetro, creio que não vai dar problemas.

Agora qual a diferença dessa forma que você passou para a que eu costumo fazer? Não deveria funcionar igual?
Responder

Gostei + 0

22/09/2014

Rafael Cunha

O seu hora funcionada hora não devido a forma que estava escrito seu where, pois se a primeira operação de comparação com a situação fosse falsa fazia registro seria falso por não existir parâmetros para delimitar que a situação poderia ser 'Paga' ou 'Cancelada'.

select * from contaspagar where data_cadastro >= '2014-09-01' and data_cadastro <= '2014-09-15' and (situacao = 'Paga' or situacao = 'Cancelada')
Responder

Gostei + 0

22/09/2014

Pedro

Então Rafael, antes de ler seu post eu já havia feito isso que vc acabou de citar select * from contaspagar where data_cadastro >= '2014-09-01' and data_cadastro <= '2014-09-15' and (situacao = 'Paga' or situacao = 'Cancelada').

Deu certo, mas não sabia a explicação. Agora que vc esclareceu eu entendi.

Mais uma vez muito obrigado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar