Em 1 de março de 2011 11:25, Anderson <[email protected]> escreveu:
> bom dia a todos, pessoal tenho esta sql rodando em um servidor com a versão
> 8.2, porem quando fiz a migração para a 8.4 parou de funcionar, se eu retiro
> o BETWEEN ela me traz os resultados.....alguem sabe o porque?
>
>
> SELECT DISTINCT romcorevalicvl_idgeral,romcorevalicvl_numeroromaneio,
> to_char(romcorevalicvl_dt_inclusao,'DD/MM/YYYY'),romcorevalicvl_para,romcorevalicvl_cd_usuarioinclusao
> FROM tb_romaneiocorevalicvl WHERE romcorevalicvl_dt_inclusao BETWEEN
> to_timestamp('28-02-2011','dd-mm-yyyy') and
> to_timestamp('28-02-2011','dd-mm-yyyy') and romcorevalicvl_para = '156'
> ORDER BY romcorevalicvl_idgeral ASC
>
>
> Aqui a estrutura da tabela
>
> CREATE TABLE tb_romaneiocorevalicvl
> (
>   romcorevalicvl_id bigint NOT NULL DEFAULT
> nextval(('tb_romaneio_corevalicvlid_seq'::text)::regclass),
>   romcorevalicvl_idgeral bigint NOT NULL DEFAULT
> nextval(('tb_romaneio_seq'::text)::regclass),
>   romcorevalicvl_numeroromaneio integer NOT NULL DEFAULT
> nextval(('tb_numeroromaneio_corevalicvl_seq'::text)::regclass),
>   romcorevalicvl_ano integer,
>   romcorevalicvl_cd_usuarioinclusao integer,
>   romcorevalicvl_dt_inclusao timestamp without time zone DEFAULT
> ('now'::text)::timestamp(6) without time zone,
>   romcorevalicvl_cd_setor integer,
>   romcorevalicvl_cd_unidade integer,
>   romcorevalicvl_de integer,
>   romcorevalicvl_para integer
> )
> WITH (
>   OIDS=TRUE
> );
> ALTER TABLE tb_romaneiocorevalicvl OWNER TO postgres;
>

Bem, eu não fiz o teste prático deste problema, mas você poderia
confirmar o que a função *to_timestamp('28-02-2011','dd-mm-yyyy')*
está retornando?

Um erro comum que eu observo nas consultas que envolvem colunas do
tipo timestamp utilizando a conversão de um tipo DATE para TIMESTAMP é
que as horas, minutos e segundos são ignorados.

Por exemplo, o retorno da função
*to_timestamp('28-02-2011','dd-mm-yyyy')* deveria ser:

2011-02-28 00:00:00.000000 --> timestamp com hora zero.

A sua condição já convertida seria:

romcorevalicvl_dt_inclusao BETWEEN '2011-02-28 00:00:00.000000' AND
'2011-02-28 00:00:00.000000'


Eu acredito que os registros tenha hora, minuto, segundo, ou pelo
menos uma fração de segundo diferente de zero, portanto são
descartados da consulta.

O correto seria ajustar o seu WHERE para trazer os registros desde a
hora 00:00:00.000000 até 23:59:59.999999, ou seja:

romcorevalicvl_dt_inclusao BETWEEN '2011-02-28 00:00:00.000000' AND
'2011-02-28 23:59:59.999999'


Faça um teste.


-- 
TIAGO J. ADAMI
http://www.adamiworks.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a