Uważam że powinno być to przechowywane jako tekst aby działało. Lub przynajmniej skonwertowane do tekstu przed sortowaniem.
Aby było dobrze sortowane to do wartości 1.2 powinieneś dopisać spacje na końcu. I tak samo we wszystkich innych przypadkach gdy masz jedną cyfrę po przecinku. Jeżeli by była wartość np. 1.234 to trzeba uzupełnić odpowiednio jedną lub dwiema spacjami na końcu.
Czyli:
1.10 -> "1.10"
1.2 -> "1.2 "
Po dopisaniu spacji zacznie ci sortować zgodnie z założeniami.
Przemyśl ile miejsc po przecinku chcesz mieć aby wiedzieć do ilu chcesz uzupełniać. A także czy przed przecinkiem pojawią się liczby dwucyfrowe.
I jeżeli przed przecinkiem pojawią się liczby dwucyfrowe lub większe to tam analogicznie także musisz uzupełnić spacjami, tyle że z przodu.
<------------------------------------------------EDITED------------------------------------------------>
Mea culpa. Przepraszam za wprowadzanie w błąd. Nadal uważam że ścieżka z przechowywaniem jako tekst jest słusznym tokiem postępowania. Ale samo posotrowanie wymaga rozdzielenia i skonwertowania do liczb całkowitych a nie sortowania jako tekstu.
Tu kod zapytania. W moim wypadku zapytanie wykonane na bazie Sqlite
select value
from (
select value,
cast(substr(value,0,instr(value,"."))AS INTEGER) as before,
cast(substr(value,instr(value,".")+1)AS INTEGER) after
from test
order by before asc, after asc)
A tu kod tworzący tabele na których testowałem
CREATE TABLE test ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, value varchar(255) );
insert into test (value) values ("1.10");
insert into test (value) values ("1.2");
insert into test (value) values ("10.1");
insert into test (value) values ("5.6");
insert into test (value) values ("1.15");
insert into test (value) values ("3.3");
insert into test (value) values ("5.16");
Przechowywanie danych jako double, float itp... dodatkowo skomplikuje (lub nawet uniemożliwo) sprawę bo tam 1.10 zostanie automatycznie zamienione na 1.1 i\lub na odwrót.