4
respostas

Copia colunas type diferentes PostgreSQL

PostgreSQL como copiar uma coluna. que está como VARCHAR. Para uma coluna INTEGER. usando um SQL. ambas colunas estão na mesma tabela.

4 respostas

Você precisa fazer cast na coluna varchar transformando-a em integer, abaixo segue um exemplo completo:

Criação da tabela de exemplo:

create table tabela_teste(
    id serial primary key,
    coluna_string varchar(100),
    coluna_integer integer
);

Preenchimento com dados aleatórios:

insert into tabela_teste (coluna_string) values ('1'), ('2'), ('3'),('4');

Por fim o update com cast, vc pode fazer no padrão Postgres usado ::

update tabela_teste set coluna_integer = coluna_string::integer;

ou então usando o padrão ANSI SQL

update tabela_teste set coluna_integer = cast(coluna_string as integer);

porém é importante destacar que caso tenha algum valor que não seja possível converter de varchar para integer a query dará erro. Nesse caso vc pode fazer um filtro com expressão regular para que só atualize os registros que são compátiveis.

Exemplo atualizando e filtrando só os valores inteiros:

update tabela_teste set coluna_integer = coluna_string::integer where coluna_string ~'^[0-9]*$';

Fausto;

update tabela_teste set coluna_integer = coluna_string::integer;

Bom com este comando. a coluna_string. permanece STRING né?. não posso alterar o Type da coluna que irei copiar sempre.

obrigados pela ajuda...

Esse comando vai apenas pegar o valor presente na coluna do tipo string, e jogar na coluna do tipo inteiro fazendo a devida conversão de tipo de dado, os valores da coluna que é string não serão afetados.

Na dúvida vc pode sempre executar as ações dentro de uma transação, para isso antes de rodar os comandos vc roda:

begin;

Assim se ocorrer algum erro ou vc não ficar satisfeito com o resultado pode executar

rollback;

e desfazer as ações.

att.

Obrigado.. Fausto Bertin Muito exclarecedor. ajudou Enorme mente... Abraço.