Цель C, проблема SQLite SELECT BETWEEN

Я пытаюсь извлечь запись из базы данных SQLite на основе временной метки UNIX, которая выбирается скроллером. Каждая запись имеет метку времени и продолжительность, поэтому, когда выбранная метка времени находится после времени начала и после времени начала плюс продолжительность, она должна быть выбрана.

Я написал запрос, который не только должен работать, но и работает в клиенте SQLite, который у меня есть, но не использует SQLite, который поставляется с XCode.

SELECT * FROM `booking` WHERE '1304168400' BETWEEN `stamp` AND (`stamp`+(`duration`*60))

Это мой запрос. Отметка времени — это выбранная отметка времени, поле отметки — отметка времени записи, а продолжительность — продолжительность бронирования в минутах.

Единственная причина, по которой я вижу, что это работает с использованием моего клиента, заключается в том, что версия SQLite отличается, и либо команда BETWEEN не поддерживается, либо не поддерживается таким же образом.

Любые советы или помощь будут оценены. Спасибо!


person Nick Babenko    schedule 03.05.2011    source источник


Ответы (1)


Вот как должен выглядеть запрос SQLite, когда он попадает в SQLite. (Без кавычек вокруг буквальной метки времени, без обратных кавычек.) Если вы можете открыть свою базу данных с помощью SQLite и выполнить этот запрос, этот синтаксис должен работать.

sqlite> SELECT *
        FROM booking
        WHERE 1304168400 BETWEEN stamp and (stamp + (duration * 60));

Защитные идентификаторы заключаются в двойные кавычки, а не в обратные кавычки.

sqlite> SELECT *
        FROM "booking"
        WHERE 1304168400 BETWEEN "stamp" and ("stamp" + ("duration" * 60));

С помощью этого запроса вы можете определить, какая версия SQLite работает.

sqlite> select sqlite_version();
person Mike Sherrill 'Cat Recall'    schedule 04.05.2011
comment
Я чувствую себя довольно глупо теперь, когда это что-то такое простое. Имея большой опыт работы с MySQL, я обычно писал свои запросы и предполагал, что SQLite будет иметь такой же, если не похожий синтаксис. Большое спасибо за это, вы очень помогли. - person Nick Babenko; 04.05.2011
comment
Стандартный SQL использует двойные кавычки для идентификаторов. В данном случае нечетным является MySQL, а не SQLite. - person Mike Sherrill 'Cat Recall'; 05.05.2011