「SoftwareReleases」テーブルがあるとします。
| id | version |
| 1 | 0.9 |
| 2 | 1.0 |
| 3 | 0.9.1 |
| 4 | 1.1 |
| 5 | 0.9.9 |
| 6 | 0.9.10 |
この出力を生成するにはどうすればよいですか?
| id | version |
| 1 | 0.9 |
| 3 | 0.9.1 |
| 5 | 0.9.9 |
| 6 | 0.9.10 |
| 2 | 1.0 |
| 4 | 1.1 |
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
を返します)
拡張機能semverを作成します。
softwareReleasesからバージョン、:semverの順序でID、バージョンを選択します。