如何在PostgreSQL中将列类型从文本更改为数组并只转换非空值?

q3aa0525  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(2)|浏览(169)

我在PostgreSQL中有一个表:

| id | country| type |
| 1  | USA    | FOO  |
| 2  | null   | BAR  |

我想将country列的列类型从text更改为array,并仅将非空值强制转换为新类型,以使表的外观如下所示:

| id | country | type |
| 1  | {USA}   | FOO  |
| 2  | null    | BAR  |

到目前为止,我已经得到了这个表达式,它可以将任何值转换到数组中。

ALTER TABLE my_table
ALTER COLUMN country TYPE TEXT[]
USING ARRAY[country];

如何使用USING表达式只转换非空值?

s3fp2yjn

s3fp2yjn1#

简单地做

ALTER TABLE my_table
ALTER COLUMN country TYPE TEXT[]
USING string_to_array(country,'');
z9smfwbn

z9smfwbn2#

可以使用CASE表达式

ALTER TABLE my_table
  ALTER COLUMN country TYPE TEXT[]
  USING case 
          when country is null then null 
          else ARRAY[country] 
        end;

相关问题