PostgreSQL中TEXT列转INTEGER遇字符串'NULL'报错的解决方法
解决PostgreSQL中TEXT列含字符串'NULL'转INTEGER的报错问题
问题根源是数据中存在字符串形式的'NULL',而非PostgreSQL认可的真正NULL值,直接转换会因无法解析该字符串报错。你之前尝试的NULLIF未生效,大概率是用法位置错误,正确做法是在类型转换前先用NULLIF把字符串'NULL'替换为真正的NULL,再执行转换。
正确的ALTER语句
ALTER TABLE analyzer_parser_event ALTER COLUMN error_id TYPE INTEGER USING (NULLIF(error_id, 'NULL')::integer);
补充:处理更多无效值的情况
如果列中除'NULL'外还存在其他非数字格式的字符串,可使用PostgreSQL 12及以上版本支持的TRY_CAST函数,转换失败时自动返回NULL,避免报错:
ALTER TABLE analyzer_parser_event ALTER COLUMN error_id TYPE INTEGER USING (TRY_CAST(NULLIF(error_id, 'NULL') AS INTEGER));
提前验证数据(可选)
若想先确认还有哪些无效值需要处理,可执行以下查询:
SELECT error_id FROM analyzer_parser_event WHERE error_id <> 'NULL' AND error_id !~ '^[0-9]+$';
内容的提问来源于stack exchange,提问作者Krzysztof Michalski
相关产品推荐
相关产品推荐

