如何在PostgreSQL 8.4中将列数据types从字符更改为数字
我正在使用以下查询:
ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0);  将character(20)的列的数据types更改为numeric(10,0)但我得到错误: 
列“代码”不能被转换为键入数字
 你可以尝试使用USING : 
可选的
USING子句指定如何从旧计算新的列值; 如果省略,则默认转换与从旧数据types到新转换的赋值相同。 如果没有从旧types到新types的隐式或赋值转换,则必须提供USING子句。
所以这可能工作(取决于你的数据):
 alter table presales alter column code type numeric(10,0) using code::numeric; -- Or if you prefer standard casting... alter table presales alter column code type numeric(10,0) using cast(code as numeric); 
 如果code中有任何code不能转换为数字,这将失败; 如果USING失败,则必须在更改列types之前手动清理非数字数据。 
 如果您的VARCHAR列包含空string(它与PostgreSQL的NULL ,您可能会记得),您将不得不使用以下行中的某些内容来设置默认值: 
 ALTER TABLE presales ALTER COLUMN code TYPE NUMERIC(10,0) USING COALESCE(NULLIF(code, '')::NUMERIC, 0); 
(在这个答案的帮助下find)