[firebase-br] RES: Erro com Between

Fabio - Yahoo frl_br em yahoo.com.br
Ter Jul 3 10:03:39 -03 2007


Bom dia Danilo,

Estive lendo o desenrolar deste seu post durante o dia de ontem e hoje como
percebi que seu problema continua resolvi dar uma atenção melhor ao seu
problema.
Não sou expert em manuseio de datas por SQL, nem muito experiente com o uso
do coalesce, mas me parece que seu problema esta justamente no uso desta
clausula.

Quando você diz: "Ele me retorna a 1º linha, ou seja: dá a informação que
hoje: 02/07/2007 está entre 20/07/2006 e 09/02/2007"
Na verdade me parece que ele não utiliza a data 02/07/2007 e sim 09/02/2007,
visto que o comando coalesce retorna a primeira expressão não null, ou seja,
o campo DATA_FINAL e não current_date, isto somente para a primeira linha.
Então neste caso sua expressão fica assim:
(09/02/2007>=20/07/2006 and 09/02/2007<=09/02/2007) Verdadeiro.
Assim a primeira linha é mostrada.

Nas outras duas o problema também é a com a clausula coalesce, pois quando
você coloca a expressão coalesce(Data_Final,current_date) <=Data_Final,
sendo no caso dos dois últimos registro o campo Data_final igual a null, até
onde eu sei o null é tratado como 0, então fica assim:

(02/07/2007>=06/02/2007 and 02/07/2007<=0) Falso
(02/07/2007>=08/03/2007 and 02/07/2007<=0) Falso
Pois, 02/07/2007 não é maior nem igual a 0

Não tenho muita certeza quando ao NULL ser igual 0, geralmente em expressões
lógicas ele é tratado assim. Mesmo assim pode considerar o NULL como não
sendo maior e nem igual, portanto falso.

Não consegui ver o propósito de seu Select, então não vou sugerir como ele
deveria ser, eu colocaria um coalesce em todos os campos Data_Final, mais
isto faria com que todos os registro sejam mostrados, não sei se é isto que
você deseja.

Espero ter ajudado.

Fabio Limeira.



-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Danilo Rogério
Enviada em: segunda-feira, 2 de julho de 2007 10:49
Para: Lista Firebase
Assunto: [firebase-br] Erro com Between

Pessoal, segue as seguintes informações

Codigo    Data_Inicial    Data_Final
------------------------------------
100        20/07/2006      09/02/2007
100        06/02/2007      null
100       08/03/2007      null

Vejam o select a baixo.
select A.*
from Tabela A
 where (A.Codigo = 100)
   and (coalesce(Data_Final,current_date) >= Data_Inicial
   and coalesce(Data_Final,current_date) <=Data_Final)

o que ocorre com o resultado:
Ele me retorna a 1º linha, ou seja: dá a informação que hoje: 02/07/2007
está entre 20/07/2006 e 09/02/2007 ao inves de retornar as outras duas
linhas.

A versão do Banco: FB 2.0.0.12710




       
____________________________________________________________________________
________
Novo Yahoo! Cadê? - Experimente uma nova busca.
http://yahoo.com.br/oqueeuganhocomisso 
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista