一尘不染

使用split_part后将值替换为空字段

sql

我有两列,id integerversion text。我正在尝试将字符串转换version为整数,以便可以选择ID的最大(最新)版本。

但是,id存储的第一个实例将自身存储为version。例子:

id | version
---+--------
10 | '10'

相对于:

id | version
---+--------
10 | '10-0'

其他行遵循惯例ID:10,版本:10-1。等等。

我该怎么做?我尝试过split_part()并投射为int。但是,split_part(version, "-", 2)将返回看起来像一个空字符串的东西。我尝试了使用a却COALESCE(splitpart..., '0')无济于事,因为它试图读取由字段索引2返回的空字段。


阅读 149

收藏
2021-05-23

共1个答案

一尘不染

使用coalesce()和nullif()的组合例如:

with my_table(version) as (
values
    ('10'), ('10-1'), ('10-2')
)

select 
    version, 
    split_part(version, '-', 1)::int as major, 
    coalesce(nullif(split_part(version, '-', 2), ''), '0')::int as minor
from my_table

 version | major | minor 
---------+-------+-------
 10      |    10 |     0
 10-1    |    10 |     1
 10-2    |    10 |     2
(3 rows)
2021-05-23