I have a sorting issue in postgres in a column with values such as version. Version is character varying, with values such as the following (un-ordered).
1.2
Postgres allow you to sort by arrays -- which is essentially what the version number represents. Hence, you can use this syntax:
order by string_to_array(version, '.')::int[] desc
Here is a full example:
select *
from (values ('1'), ('2.1'), ('1.2.3'), ('1.10.6'), ('1.9.4')) v(version)
order by string_to_array(version, '.')::int[] desc;
And even a demonstration.