답변:
원하는 출력을 생성하려면 다음을 수행하십시오.
SELECT id, version
FROM versions
ORDER BY string_to_array(version, '.')::int[];
전체 text
배열을 배열로 캐스트 할 수 있습니다 integer
( 9
전에 정렬 10
).
하나는 ORDER BY
유형 을 배열 할 수 있습니다. 이는 각 요소의 순서와 동일합니다. 더 짧은 어레이는 동일한 선행 부품을 가진 더 긴 어레이보다 먼저 나옵니다.
db <> fiddle here
이전 SQL 바이올린.
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를 만듭니다;
버전별로 ID를 선택하십시오 : SoftwareReleases 순서에서 버전 :: semver;