Vertica SQL中Varchar数组转Int数组失败问题咨询
解决Vertica中Varchar数组转Int数组的报错问题
我来帮你梳理下这个问题的原因和解决办法:
为什么第一个查询成功,第二个报错?
- 第一个查询里的
array['1','2','3']是纯数字字符串组成的varchar数组,每个元素都是合法的整数格式,Vertica可以自动逐个将元素转换为int类型,所以CAST(...) AS INT[]能正常执行。 - 第二个查询里的
STRING_TO_ARRAY('[1,2,3,4,5,6]', ',')返回的数组是['[1', '2', '3', '4', '5', '6]']——注意第一个元素带[,最后一个带],这些都是非数字字符,无法直接转换为int。同时Vertica默认不支持直接将整个varchar数组强制转换为int数组,必须确保每个元素都是合法的数字字符串后,再通过合适的方式转换。
正确的解决方案
方法1:用TRIM清理括号+ARRAY_CAST转换
先去掉原始字符串首尾的方括号,再拆分数组,最后用ARRAY_CAST转换类型:
SELECT ARRAY_CAST(STRING_TO_ARRAY(TRIM('[1,2,3,4,5,6]', '[]'), ',') AS INT[]) AS final;
方法2:用UNNEST拆分+逐个转换+聚合
如果ARRAY_CAST不适用(比如旧版本Vertica),可以拆分数组元素逐个转换,再重新聚合为int数组:
SELECT ARRAY_AGG(CAST(element AS INT)) AS final FROM ( -- 先清理括号,再拆分数组 SELECT UNNEST(STRING_TO_ARRAY(TRIM('[1,2,3,4,5,6]', '[]'), ',')) AS element ) t;
这两种方法都能得到你想要的结果[1,2,3,4,5,6]。
内容的提问来源于stack exchange,提问作者Daniel Raz
相关产品推荐
相关产品推荐

