Celso Cardoso wrote: > UPDATE PRODUTO SET PROD_CUSTONOVO=CASE WHEN '+00000018.25'=0 THEN NULL > ELSE '+00000018.25' END WHERE PROD_CODIGO=3 > ERROR: invalid input syntax for integer: "+00000018.25" > No comando acima, o PostgreSQL "sabe" o tipo de um dos operandos (o tipo do 0 -- que é inteiro) mas não "sabe" o tipo de '+00000018.25', então segundo a regra [1], ele acha que '+00000018.25' (na verdade para o PostgreSQL ele é unknown) é int e por isso você vê o erro acima. A dica que o Osvaldo deu é correta pois você está informando ao PostgreSQL que o tipo de '+00000018.25' é numeric e, então, o PostgreSQL converte o 0 para que ele possa fazer a comparação.
Vamos a um exemplo: euler=# create table foo (a int); CREATE TABLE euler=# insert into foo values(123); INSERT 0 1 euler=# create table bar (a numeric); CREATE TABLE euler=# insert into bar values(1.23); INSERT 0 1 euler=# update foo set a=case when '123'=0 then null else 123 end; UPDATE 1 Aqui o comando é executado com sucesso porque o PostgreSQL supõe (a partir do operando da direita que é um integer) que o operando da esquerda também é um integer; e a comparação é feita com sucesso. euler=# update bar set a=case when '1.23'=0 then null else 1.23 end; ERRO: sintaxe de entrada é inválida para integer: "1.23" Aqui o comando falha porque o PostgreSQL "erra" ao supor que o operando da esquerda é um integer (por isso o erro). euler=# update bar set a=case when '1.23'=0.0 then null else 1.23 end; UPDATE 1 Aqui o comando é executado com sucesso porque o PostgreSQL supõe (a partir do operando da direita que é um float) que o operando da esquerda também é um float. euler=# update bar set a=case when cast('1.23' as numeric)=0 then null else 1.23 end; UPDATE 1 É a opção mais segura pois o PostgreSQL não precisa supor nada. Por último, evite conversões implícitas para não ter surpresas. [1] http://www.postgresql.org/docs/8.3/static/typeconv-union-case.html -- Euler Taveira de Oliveira http://www.timbira.com/ _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral