comparacao datas
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!
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
Curtidas 0
Respostas
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.
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