Dada uma tabela "SoftwareReleases":
| id | version |
| 1 | 0.9 |
| 2 | 1.0 |
| 3 | 0.9.1 |
| 4 | 1.1 |
| 5 | 0.9.9 |
| 6 | 0.9.10 |
Como faço para produzir esta saída?
| id | version |
| 1 | 0.9 |
| 3 | 0.9.1 |
| 5 | 0.9.9 |
| 6 | 0.9.10 |
| 2 | 1.0 |
| 4 | 1.1 |
Para produzir a saída desejada:
Converta toda a
text
matriz em umainteger
matriz (para classificar9
antes10
) eORDER BY
isso.Isso é o mesmo que ordenar por cada um dos elementos.
Matrizes mais curtas vêm antes das mais longas com uma parte inicial equivalente.
db<>fiddle aqui
Old sqlfiddle
SQLFiddle: http://sqlfiddle.com/#!15/c9acb/1
Se você espera mais elementos na string da versão, use apenas mais índices de matriz. Se o índice não existir, o resultado será nulo (por exemplo
v[10]
, retornaránull
)criar extensão semver;
selecione id, versão de SoftwareReleases ordene por versão::semver;
http://www.pgxn.org/dist/semver/doc/semver.html