首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将varchar字段的类型改为整型:“无法自动转换为整型”

将varchar字段的类型改为整型:“无法自动转换为整型”
EN

Stack Overflow用户
提问于 2012-11-01 11:33:11
回答 8查看 235.9K关注 0票数 184

我有一个很小的表,其中的某个字段包含类型"character varying“。我试图将其更改为"Integer“,但它给出了一个错误,即不能进行类型转换。

有没有办法解决这个问题,或者我应该创建另一个表,并使用查询将记录带入其中。

该字段仅包含整数值。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-11-01 11:47:21

不存在从textvarcharinteger的隐式(自动)转换(即,不能将varchar传递给需要integer的函数或将varchar字段分配给integer字段),因此必须使用ALTER TABLE ... ALTER COLUMN ... TYPE ... USING指定显式转换

代码语言:javascript
复制
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);

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

代码语言:javascript
复制
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);

若要在转换前剥离空白,请执行以下操作。

如果命令是在psql中运行的,从错误消息中可以明显看出这一点,但是PgAdmin-III可能没有显示完整的错误。如果我在PostgreSQL 9.2上的psql中测试它,结果如下:

代码语言:javascript
复制
=> 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迁移的,但根本原因是相同的,答案也是适用的。

如果错误仍然出现,则可能与列值无关,但此列或列默认值上的索引可能无法进行类型转换。索引需要在ALTER COLUMN之前删除,在ALTER COLUMN之后重新创建。应适当更改默认值。

票数 305
EN

Stack Overflow用户

发布于 2014-07-30 16:35:04

this为我工作。

将varchar列更改为int

代码语言:javascript
复制
change_column :table_name, :column_name, :integer

得到:

代码语言:javascript
复制
PG::DatatypeMismatch: ERROR:  column "column_name" cannot be cast automatically to type integer
HINT:  Specify a USING expression to perform the conversion.

已更改为

代码语言:javascript
复制
change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'
票数 76
EN

Stack Overflow用户

发布于 2018-05-09 16:55:10

你可以像这样做:

代码语言:javascript
复制
change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'

或者试试这个:

代码语言:javascript
复制
change_column :table_name, :column_name, :integer, using: 'column_name::integer'

如果您有兴趣找到有关此主题的更多信息,请阅读本文:https://kolosek.com/rails-change-database-column

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13170570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档