加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 将varchar字段的类型更改为整数:“不能自动转换

发布时间:2020-12-13 16:54:19 所属栏目:百科 来源:网络整理
导读:我有一个小表,某个字段包含类型“字符变化”。我试图将其更改为“整数”,但它给出一个错误,铸造是不可能的。 有没有办法,或者我应该创建另一个表,并使用查询将记录带入它。 该字段只包含整数值。 没有从文本或varchar到整数的隐式(自动)强制转换(即,您
我有一个小表,某个字段包含类型“字符变化”。我试图将其更改为“整数”,但它给出一个错误,铸造是不可能的。

有没有办法,或者我应该创建另一个表,并使用查询将记录带入它。

该字段只包含整数值。

没有从文本或varchar到整数的隐式(自动)强制转换(即,您不能将varchar传递给期望整数的函数或将varchar字段分配给整数),因此必须使用 ALTER TABLE … ALTER COLUMN … TYPE … USING指定显式转型:
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);

请注意,您可能在文本字段中有空格;在这种情况下,使用:

ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);

在转换前去除空白区域。

如果命令在psql中运行,错误消息显而易见,但是可能PgAdmin-III不会显示完整的错误。这里是如果我测试它在PostgreSQL 9.2的psql会发生什么:

=> CREATE TABLE test( x varchar );
CREATE TABLE
=> insert into test(x) values ('14'),(' 42  ');
INSERT 0 2
=> ALTER TABLE test ALTER COLUMN x TYPE integer;
ERROR:  column "x" cannot be cast automatically to type integer
HINT:  Specify a USING expression to perform the conversion. 
=> ALTER TABLE test ALTER COLUMN x TYPE integer USING (trim(x)::integer);
ALTER TABLE

感谢@muistooshort添加USING链接。

另见this related question;它是关于Rails迁移,但根本原因是相同的,答案适用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读