comparacao datas

Oracle

24/08/2009

Olá pessoal,
O que vou postar aqui não é uma dúvida minha e sim uma teimosia de um colega de trabalho.
Estou tentando explicar pra ele o quanto está errado a seguinte comparação abaixo:
to_char(data,´dd-mm-yyyy´) between ´01-05-2009´ and ´30-05-2009´.
Tento explicar pra ele que o correto seria comparar com to_date (campo data eh data nao alfanumerico), que esta comparação acima vai trazer dados incorretos, mas não consigo passar isto pra ele, tem alguém que pode me passar uma resposta mais didática, com exemplos e tal.

Desde já agradeço!


Stgmta

Stgmta

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

24/08/2009

se a data for transformada em texto, ela seguirá a ordenação de um texto:

01-05-2009
01-06-2009
01-07-2009
01-08-2009
02-05-2009
02-06-2009
02-07-2009
02-08-2009
03-05-2009
03-06-2009
03-07-2009
03-08-2009
...
30-05-2009

então, se a condição do where for:
[b:91a00882e7]to_char(data,´dd-mm-yyyy´) between ´01-05-2009´ and ´30-05-2009´[/b:91a00882e7]
todas as linhas acima serão listadas.

agora, se forem datas, a ordenação será:
2009-05-01
2009-05-02
2009-05-03
2009-05-30
2009-06-01
2009-06-02
2009-06-03
2009-07-01
2009-07-02
2009-07-03
2009-08-01
2009-08-02
2009-08-03

se e o filtro utilizado for:
[b:91a00882e7]data between to_date(´01-05-2009´, ´dd-mm-yyyy´) and to_date(´30-05-2009´, ´dd-mm-yyyy´)[/b:91a00882e7]
serão retornados os registros
2009-05-01
2009-05-02
2009-05-03
2009-05-30

pois eles fazem parte do intervalo solicitado.


GOSTEI 0
POSTAR