PostgreSQL como copiar uma coluna. que está como VARCHAR. Para uma coluna INTEGER. usando um SQL. ambas colunas estão na mesma tabela.
PostgreSQL como copiar uma coluna. que está como VARCHAR. Para uma coluna INTEGER. usando um SQL. ambas colunas estão na mesma tabela.
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.