postgresql – 查找哪一行包含一个不能转换为整数的值
发布时间:2020-12-13 15:54:38 所属栏目:百科 来源:网络整理
导读:我在重组数据表中有一些操作,到目前为止一直很好. 在一个超过50000行的表中,我有文本列,其中文本应该只是数字. 现在我想将其转换为整数列. 所以: ALTER TABLE mytable ALTER COLUMN mycolumn TYPE integer; 这会产生错误42804:* datatype_mismatch * 通过
我在重组数据表中有一些操作,到目前为止一直很好.
在一个超过50000行的表中,我有文本列,其中文本应该只是数字. 现在我想将其转换为整数列. 所以: ALTER TABLE mytable ALTER COLUMN mycolumn TYPE integer; 这会产生错误42804:* datatype_mismatch * 通过阅读文档,我找到了解决方案: ALTER TABLE mytable ALTER COLUMN mycolumn TYPE integer USING (TRIM(mycolumn)::integer); 但是我知道数字可能在数字顺序方面不正确,因为这会“掩盖”错误并且有可能编辑列(手动).毕竟,也许只是添加了尾随空格或者进行了一些其他的小编辑. 我有数据备份. 请查询是否过于复杂. 解决方法
扩展@ dystroy的答案,此查询应该咳嗽任何违规行的精确值:
CREATE OR REPLACE FUNCTION convert_to_integer(v_input text) RETURNS INTEGER AS $$ BEGIN BEGIN RETURN v_input::INTEGER; EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION 'Invalid integer value: "%". Returning NULL.',v_input; RETURN NULL; END; END; $$LANGUAGE plpgsql; 原始答案: 如果以下工作: ALTER TABLE mytable ALTER COLUMN mycolumn TYPE integer USING (TRIM(mycolumn)::integer); 然后你应该可以运行以下命令找到垃圾桶: select mycolumn from mytable where mycolumn::text <> (TRIM(mycolumn)::integer)::text; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |