Biorąc pod uwagę tabelę „SoftwareReleases”:
| id | version |
| 1 | 0.9 |
| 2 | 1.0 |
| 3 | 0.9.1 |
| 4 | 1.1 |
| 5 | 0.9.9 |
| 6 | 0.9.10 |
Jak wygenerować ten wynik?
| id | version |
| 1 | 0.9 |
| 3 | 0.9.1 |
| 5 | 0.9.9 |
| 6 | 0.9.10 |
| 2 | 1.0 |
| 4 | 1.1 |
postgresql
order-by
sorting
natural-sort
Chris Betti
źródło
źródło
string_to_array(regexp_replace(version, '[^0-9.]', '', 'g'), '.')::int[]
SELECT max(string_to_array(build_version, '.')::int[]
SQLFiddle: http://sqlfiddle.com/#!15/c9acb/1
Jeśli oczekujesz więcej elementów w łańcuchu wersji, po prostu użyj więcej indeksów tablic. Jeśli indeks nie istnieje, wynik będzie pusty (np.
v[10]
Zwrócinull
)źródło
10
się pomiędzy1
i2
.v[1]::int
chodzi. Rzuca ciąg na liczbę całkowitą.utwórz rozszerzenie semver;
wybierz id, wersję z SoftwareReleases uporządkuj według wersji :: semver;
http://www.pgxn.org/dist/semver/doc/semver.html
źródło