【发布时间】:2017-10-11 18:08:34
【问题描述】:
我正在尝试使用以下查询将列从 varchar 转换为 bigint:
ALTER TABLE 'table_name' ALTER COLUMN 'colname' SET DATA TYPE BIGINT;
但我收到以下错误:
SQL Error [2377] [0A000]: [Vertica][VJDBC](2377) ROLLBACK: Cannot convert column "colname" from "varchar(128)" to type "int"
[Vertica][VJDBC](2377) ROLLBACK: Cannot convert column "colname" from "varchar(128)" to type "int"
com.vertica.util.ServerException: [Vertica][VJDBC](2377) ROLLBACK: Cannot convert column "src_mainuser" from "varchar(128)" to type "int"
该列具有 int 值,例如 37439510,但采用 varchar 格式。
【问题讨论】:
-
似乎是一个数据问题,并且您在某处有一个非整数。尝试 select colname::bigint from tablename (很确定这是 vertica 的有效数据转换语法),如果出错,您在该列中有一个或两个字符。
-
这样做了吗...没有错误...
-
可能是 Vertica 的限制...该错误并没有提供太多信息,实际上没有提及冲突的数据类型。联系供应商,Vertica 开发团队可能有比我接下来说的更好的答案。标准解决方法,创建第二个表,其列为 big int,然后将旧表中的所有行批量插入其中。删除旧表,重命名新表。如果您从 vertica 得到更好的答案,请分享。
-
Vertica 支持无济于事...这是他们意识到的限制。回答