回答:
希望する出力を生成するには、単純に次のことができます。
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
です。文字列を整数にキャストします。
拡張機能semverを作成します。
SoftwareReleasesからバージョン、:semver、IDの順に選択します。