2010-12-06 8 views
0

J'utilise SQLite DB dans mon application Android.Question de tri SQLite

Il existe des nombres et des chaînes dans une colonne. Quelque chose comme:

3, 1, 2, 6/6A, X, 3A, 10, 12, XY, 44, ZW

Si je sélectionne des valeurs de cette colonne et les trier, je reçois:

1, 10, 12, 2, 3, 3A, 44, 6/6A, X, XY, ZW

est-il possible à SQLite pour trier ces valeurs de manière, que je voudrais obtenir:

1, 2, 3, 3A, 6/6A, 10, 12, 44, X, XY, ZW

Merci,

Mur

Répondre

1

après de nombreuses expériences que j'ai une requête appropriée:

select _id, case 
when cast(_id as number) = 0 then _id 
when cast(_id as number) <>0 then cast(_id as number) 
end as sorting 
from lines 
order by sorting 

La bonne chose est que le rendement de l'opération de coulée pour 6 back '6/6A.

UPD

Je ne sais pas pourquoi, mais si j'utilise cette requête dans mon application Android, je reçois la colonne _id comme nombre, donc je dois faire la coulée au texte

select cast(_id as text) as _id, case 
when cast(_id as number) = 0 then _id 
when cast(_id as number) <>0 then cast(_id as number) 
end as sorting 
from lines 
order by sorting 
1

Vous pouvez trier les nombres purs et les chaînes pures comme un simple désiré en stockant les chiffres que les numéros (vous stockez actuellement tout comme des chaînes). Les hybrides (3A et 6A) sont plus délicats. Une option consiste à extraire le préfixe numérique et stocker que dans une colonne de tri (ainsi que les autres valeurs non modifiées):

original sort 
    1  1 
    2  2 
    6A  6 
    6  6 
    3A  3 
    X  X 
    XY  XY 

Ensuite, l'ordre par la colonne de tri suivi par la colonne d'origine:

SELECT * FROM MyTable 
ORDER BY sort, original 
+0

voulez-vous dire, que je Shoul d avoir des tables différentes pour les nombres et les chaînes? et puis utilisez simplement l'union ?! – Tima

+0

Non, une seule table. SQLite est parfaitement heureux de stocker plusieurs types dans une seule colonne. –

+0

désolé, mais je ne suis pas sûr, je vous comprends bien. Dois-je changer la façon de créer une table? ou puis-je déjà utiliser des données existantes, même si les numéros sont enregistrés sous forme de chaîne. Ou que vouliez-vous dire par «stocker les chiffres sous forme de nombres»? – Tima

0

inspiré par les solutions de Tima et Marcelo Cantos J'ai trouvé la solution suivante:

SELECT * FROM MyTable ORDER BY CAST(original AS INTEGER), original;