如何在PostgreSQL中将text类型列转为array且仅转换非空值?
解决PostgreSQL中仅将非空值转为数组的列类型修改问题
你需要在USING子句中加入条件判断,仅当country列的值非空时才将其转为数组,空值则直接保留null而非生成包含null元素的数组。
修改后的SQL语句如下:
ALTER TABLE my_table ALTER COLUMN country TYPE TEXT[] USING CASE WHEN country IS NOT NULL THEN ARRAY[country] ELSE NULL END;
原理说明
原语句中ARRAY[country]会对所有值生效:当country为null时,会生成包含单个null元素的数组{null};通过CASE条件判断,我们只对非空值执行数组转换,空值则保持原有的null状态,完全符合你想要的最终表结构。
转换后的表结构将变为:
| id | country | type |
| 1 | {USA} | FOO |
| 2 | null | BAR |
内容的提问来源于stack exchange,提问作者Vitali Plagov
相关产品推荐
相关产品推荐

