2010-11-17 5 views
6

J'ai la requête suivante dans SQLite:Comparer les chaînes sous forme de nombres dans SQLite3

SELECT * FROM t1 ORDER BY t1.field 

t1.field est un nombre contenant colonne de texte. Est-il possible de forcer SQLite à considérer les valeurs de t1.field comme des nombres au lieu de chaînes (sans faire ALTER TABLE)? À l'heure actuelle, le tri est une chaîne pure, donc 10 va avant 2.

Merci.

Répondre

16

Eh bien, a trouvé une solution:

SELECT * FROM t1 ORDER BY t1.field + 0 

La partie + 0 semble forcer la conversion au numéro

+0

merci cela m'a aidé, par intérêt sur quelle plate-forme que vous utilisez SQLite? –

+7

SELECT * FROM t1 ORDER BY CAST (t1.field AS INTEGER) –

+0

Vous pouvez même trier les données mélangées. Si vous utilisez 'ORDER BY t1.field + 0, t1.field', cela triera d'abord tous les nombres, puis toutes les chaînes qui n'auront pas pu être converties en un nombre ->' ["non", "oui", "1", "5", "10", 50 "]' – relet

Questions connexes