2010-03-05 5 views
1

J'utilise une base de données sqlite pour stocker les données du journal.sqlite: problème de sélection par valeurs réelles

Ma table a beaucoup de colonnes de type "réel". Lorsque j'essaie d'exécuter des requêtes comme:

SELECT * FROM log WHERE SomeNumber = 61; 
SELECT * FROM log WHERE SomeNumber='61'; 

Il ne retournera rien.

requêtes comme:

SELECT * FROM log WHERE SomeNumber < 10 
SELECT * FROM log WHERE SomeNumber > 10 

Est-ce retour des plages incorrectes.

Y at-il un problème avec ma syntaxe?

Merci,

+1

Comment avez-vous générez la table, pouvez-vous poster le DDL? –

+0

Heres la structure de la table: CREATE TABLE journal ( texte Temps, réel TemperaturedegC, ReceivedPackets réel, erreurs réelles ); – Goro

Répondre

1

Cela dépend vraiment de ce que vous mettez dans votre table. Les nombres réels sont presque toujours universellement difficiles. Une valeur "réelle" de 61 peut être stockée sous la forme 61.0000000000001. La prémisse de base est, si vous avez besoin de vérifier l'égalité, préférez les entiers.

Vous pouvez essayer:

SELECT * FROM log WHERE SomeNumber = 61.0; 

Il pourrait aussi dépendre de la quantité de précision que vous avez entré votre valeur originale avec. NB: Je tiens à préciser que normalement, une valeur entière comme 61 est stockée précisément même en tant que réel. Ceci est juste une simplification.

0

J'ai exactement le même problème lors de l'utilisation réel dans la requête, et je résolu 'à l'aide de la requête suivante

SELECT * FROM log WHERE SomeNumber = 61.7; 

Devient

SELECT * FROM log WHERE SomeNumber between 61.7-0.00001 and 61.7+0.00001;