我有两列,id integer和version text。我正在尝试将字符串转换version为整数,以便可以选择ID的最大(最新)版本。
id integer
version text
version
但是,id存储的第一个实例将自身存储为version。例子:
id
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返回的空字段。
split_part()
int
split_part(version, "-", 2)
COALESCE(splitpart..., '0')
使用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)