Как получить все результаты, когда столбец больше нуля в sqlite? - PullRequest
2 голосов
/ 08 февраля 2011

Я создал таблицу в SQLite Chrome (html5):

transaction.executeSql(
            'CREATE TABLE IF NOT EXISTS record('+
            'id INTEGER NOT NULL PRIMARY KEY,'+
            'fkindicatorspeciesid INTEGER NOT NULL REFERENCES indicatorspecies(indicatorspeciesid),'+
            'latitude INTEGER NOT NULL,'+
            'longitude INTEGER NOT NULL,'+
            'time TEXT NOT NULL,'+
            '`when` TEXT NOT NULL,'+
            'numberseen INTEGER NOT NULL,'+
            'notes TEXT NOT NULL,'+
            'online_recordid INTEGER,'+
            'status TEXT,'+
            'locationid INTEGER REFERENCES location(locationid),'+
            'surveyid INTEGER REFERENCES survey(id));',
            [], nullHandler,errorHandler);

Затем я добавляю в него некоторые данные: enter image description here

Теперь я пытаюсь получить все записи, где 'online_recordid' больше нуля:

select * from record where online_recordid > 0;

Я не должен возвращать свою запись, потому что в столбце 'online_recordid' ничего нет. Проблема в том, что я получаю запись обратно!

Ответы [ 3 ]

1 голос
/ 08 февраля 2011

SQLite использует более общую систему динамических типов.

Вы можете корректно сохранить '' (пустую строку) в online_recordid, ДАЖЕ ЕСЛИ это определено как "INTEGER". Это влияет только на Type Affinity и никак не ограничивает данные в отличие от традиционной СУБД.

Скорее всего, произошло то, что ваш код вставлял '' в online_recordid, когда то, что вы действительно хотели сохранить, было NULL.

Когда запускается запрос online_recordid > 0, пробел преобразуется в [что-то], что делает его >0.

0 голосов
/ 08 февраля 2011

Вот как я в конце концов решил это.

select * from record where online_recordid <> '' and online_recordid > 0;
0 голосов
/ 08 февраля 2011

Просто убедитесь, что online_recordid не равен нулю:

select * from record where online_recordid > 0 and online_recordid is not null

Однако поведение странное.Я пытался выполнить тот же запрос, что и вы, но я не получил никаких записей назад.Может быть, я сделал что-то другое, чем ты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...