如何在Amazon Redshift中修改数据类型?varchar转bigint失败求助
在Amazon Redshift中将varchar类型alarm_id转为bigint的正确方法
先排查转换失败的核心原因
你之前的尝试失败,要么是语法错误,要么是字段中存在无法转换为数字的脏数据。先通过以下语句找出所有无法转换为bigint的记录:
SELECT alarm_id FROM alarm_item WHERE TRY_CAST(alarm_id AS BIGINT) IS NULL;
这条语句会筛选出空字符串、非数字字符、超出bigint范围的值(比如超过9223372036854775807的数)。
处理脏数据
根据排查结果修正数据,比如:
- 将空字符串转为NULL:
UPDATE alarm_item SET alarm_id = NULL WHERE alarm_id = '';
- 删除无法修正的脏数据:
DELETE FROM alarm_item WHERE TRY_CAST(alarm_id AS BIGINT) IS NULL;
正确的列类型修改语句
Redshift修改字符串列到数值类型时,必须通过USING子句指定转换逻辑,正确语句如下:
ALTER TABLE alarm_item ALTER COLUMN alarm_id TYPE BIGINT USING alarm_id::BIGINT;
或者用CAST语法效果一致:
ALTER TABLE alarm_item ALTER COLUMN alarm_id TYPE BIGINT USING CAST(alarm_id AS BIGINT);
你之前尝试的语句错误点说明
SELECT CONVERT(BIGINT, 'alarm_id'):错误地将字段名加了单引号,变成了字符串常量,而非引用字段SELECT CONVERT(alarm_id AS INT8):Redshift的CONVERT语法应为CONVERT(BIGINT, alarm_id),参数顺序错误ALTER TABLE alarm_item ALTER COLUMN alarm_id TYPE BIGINT:缺少USING子句,Redshift无法自动推断转换规则ALTER COLUMNalarm_id TYPE BIGINT FROM alarm_item:语法错误,正确格式是ALTER TABLE ... ALTER COLUMN ...
内容的提问来源于stack exchange,提问作者pamela.mg
相关产品推荐
相关产品推荐

