2010-06-23 6 views
5

Je travaille sur une application Android où l'utilisateur a différentes options pour trier les données affichées qui proviennent de la base de données. À l'heure actuelle ma chaîne de orderBy que je passe à la méthode requête androïdes() ressemble à ceci:Déterminer le type de données d'une colonne dans SQLite

"LOWER("+columnName+") ASC" 

Le problème est que si le type de données dans la colonne spécifiée par columnName est un entier, appelant INFÉRIEUR() sur elle sera le faire trier par ordre alphabétique, c'est-à-dire en se basant seulement sur le chiffre le plus à gauche, ce qui n'a bien sûr aucun sens pour les données numériques. Par conséquent, je veux seulement appliquer LOWER() si le type de données de la colonne n'est pas entier. Ce que j'ai à l'esprit est une déclaration comme ceci:

"CASE WHEN [data type of columnName is integer] THEN "+columnName+" ASC ELSE LOWER("+columName+") ASC END" 

La partie entre crochets est ce que je ne sais pas comment faire. Est-ce que SQLite fournit une fonction pour déterminer le type de données d'une colonne?

Répondre

10

Voulez-vous vraiment le type de la colonne , ou le type de la valeur? (SQLite is dynamically-typed, donc la distinction est importante.)

Si vous voulez ce dernier, vous pouvez utiliser typeof(columnName).

+0

Dans mon cas, cela n'a pas vraiment d'importance. Le type des valeurs doit correspondre au type de la colonne. Donc, typeof (columnName) devrait fonctionner parfaitement. Merci beaucoup. –

0

Avez-vous déclaré la colonne comme un entier lors de la configuration de la table? Sinon, sqlite le stockera sous forme de texte et les tris fonctionneront comme vous l'avez décrit.

create table if not exists exampletable (columnName integer); 
+0

Oui, j'ai déclaré les colonnes numériques en tant qu'entier. Et si je supprime l'appel à LOWER(), les colonnes entières sont triées comme souhaité. Mais bien sûr, l'appel LOWER() est là pour une raison parce que c'est comme ça que je veux que les colonnes de texte soient triées. –

6

Utilisation:

PRAGMA table_info(table-name); 

pour obtenir des informations de table.

Questions connexes