为什么更新集更改数据类型为Postgres

时间:2019-04-15 13:16:37

标签: postgresql postgresql-11

我有一个CSV,其中包含存储为字符串的数字,例如:加载时的1,200被存储为VARCHAR

我想将它们存储为整数。因此测试了以下内容;

update data
set stringy_number = replace (stringy_number,',','')::integer 

这会运行并从数字中删除,,但不会更改字符类型。然后我尝试了

update data
set stringy_number::integer = replace (stringy_number,',','')::integer 

哪个引发了语法错误。在这一点上,我切换到了下面的方法,但是我不明白为什么不能同时设置数据类型和更新

alter table data
alter column stringy_number type integer using replace(stringy_number,',','')::integer;

1 个答案:

答案 0 :(得分:0)

update处理这些值。您可以将数据类型转换为另一数据类型,但结果仍将转换为基础列类型。

->您可以在文本列中保存一个“数字”,因为很容易将数字转换为文本。您不能在数字列中保存字母,因为无法(轻松)完成强制转换。

alter column适用于整个列类型。更改类型时,您可以提供一种自定义转换方法,以允许旧数据与新数据类型匹配。