Answers:
要产生所需的输出,您可以简单地:
SELECT id, version
FROM versions
ORDER BY string_to_array(version, '.')::int[];
可以将整个text
数组转换为integer
数组(在9
之前排序10
)。
一个可以ORDER BY
数组类型。这与每个元素的排序相同。较短的阵列排在较长的阵列之前,而前排具有相同的引导部分。
db <> fiddle 这里是
旧的SQL Fiddle。
string_to_array(regexp_replace(version, '[^0-9.]', '', 'g'), '.')::int[]
SELECT max(string_to_array(build_version, '.')::int[]
select id,
name,
v[1] as major_version,
v[2] as minor_version,
v[3] as patch_level
from (
select id,
name,
string_to_array(version, '.') as v
from versions
) t
order by v[1]::int desc, v[2]::int desc, v[3]::int desc;
SQLFiddle:http ://sqlfiddle.com/#!15/c9acb/1
如果您希望版本字符串中包含更多元素,则只需使用更多数组索引即可。如果索引不存在,则结果将为null(例如,v[10]
将返回null
)
10
介于1
和之间2
。
v[1]::int
。它将字符串转换为整数。