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迁移,但根本原因是相同的,答案适用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |