使用split_part后在空字段中替换值

kba*_*bar 5 sql postgresql split natural-sort

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

但是,id商店本身的第一个实例为version.例:

id | version
---+--------
10 | '10'
Run Code Online (Sandbox Code Playgroud)

而不是:

id | version
---+--------
10 | '10-0'
Run Code Online (Sandbox Code Playgroud)

其他行遵循约定ID:10,版本:10-1.等等.

我怎么能做到这一点?我已经尝试split_part()并施展为int.但是,split_part(version, "-", 2)将返回看起来像空字符串的内容.我尝试使用a COALESCE(splitpart..., '0')无效,因为它试图读取字段索引2返回的空字段.

kli*_*lin 3

使用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)    
Run Code Online (Sandbox Code Playgroud)