繁体   English   中英

PostgreSQL 9.6 更改某个数据类型表中的所有列

[英]Change all columns in table of a certain data type in PostgreSQL 9.6

似乎几个月前我遇到了一个关于这个的问题,但我现在似乎找不到它。

基本上,我想做两件事。

首先,许多表格由几列numeric(20,2) ,我想将它们全部更改为numeric 该语句对于一列来说足够简单:

ALTER TABLE table_name
ALTER COLUMN code
TYPE numeric;

照顾那个。

其次,在这些列上,我想删除所有尾随零:

UPDATE table_name
SET code = replace(replace(code::text, '.50', '.5'), '.00', '')::numeric;

很难弄清楚如何自动化它,所以我只需要指定表格,它就会清理表格。 很确定这是可能的。

您可以使用以下语句找到具有要更改的数据类型的所有列:

select column_name, table_name
from information_schema.columns
where data_type='numeric'
    and numeric_precision = 20
    and numeric_scale = 2;

您可以使用自定义函数或 DO 命令迭代结果,例如:

do $$
declare
t record;
begin
    for t IN select column_name, table_name
            from information_schema.columns
            where data_type='numeric'
                and numeric_precision = 20
                and numeric_scale = 2;
    loop
        execute 'alter table ' || t.table_name || ' alter column ' || t.column_name || ' type numeric';
    end loop;
end$$;

此外,要删除尾随零,更通用的解决方案是将值转换为浮点或双精度,然后再转换回数字,例如:

set code = cast(cast(code as double precision) as numeric);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM