Ответ 1
SQLite не имеет логического типа: Какие типы данных поддерживает SQLite?
Записанная строка как она должна работать, просто используйте целые значения 1 и 0 в ваших данных, чтобы представить логическое значение.
Кажется, это глупый вопрос, и все же. Это может быть моя IDE, которая меня раздражает. Здесь код (это генерируется из DbLinq):
SELECT pics$.Caption, pics$.Id, pics$.Path, pics$.Public, pics$.Active, portpics$.PortfolioID
FROM main.Pictures pics$
inner join main.PortfolioPictures portpics$ on pics$.Id = portpics$.PictureId
WHERE portpics$.PortfolioId = 1 AND pics$.Id > 0
--AND pics$.Active = 1 AND pics$.Public = 1
ORDER BY pics$.Id
Если я запустил этот запрос, я получаю три строки назад, с двумя булевыми полями, называемыми активными и общедоступными. Добавление в пронумерованную строку не возвращает строк. Изменение строки на любое из следующих значений:
pics$.Active = 'TRUE'
pics$.Active = 't'
pics$.Active = boolean(1)
Это не работает. Либо ошибки, либо нет результатов. Я искал это для поиска и нашел недостаток в реальных SQL-запросах. И вот мы здесь.
Итак: как использовать логическое поле в предложении where в SQLite?
IDE является администратором SQLite.
Обновление. Ну, я нашел ответ. Администратор SQLite позволит вам самостоятельно создавать свои собственные типы; создаваемый SQL-создатель выглядит следующим образом:
CREATE TABLE [Pictures] ([Id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
[Path] VARCHAR(50) UNIQUE NOT NULL,[Caption] varchAR(50) NULL,
[Public] BOOLEAN DEFAULT '0' NOT NULL,[Active] BOOLEAN DEFAULT '1' NOT NULL)
Исправление для запроса
AND pics$.Active = 'Y' AND pics$.Public = 'Y'
Реальная проблема здесь, как указал первый ответчик, в SQLite не существует логического типа. Не проблема, а что-то, о чем нужно знать. Я использую DbLinq для создания моего уровня данных; возможно, это не должно допускать сопоставление типов, которые SQLite не поддерживает. Или он должен отображать все типы, не относящиеся к SQLite, к типу string.
SQLite не имеет логического типа: Какие типы данных поддерживает SQLite?
Записанная строка как она должна работать, просто используйте целые значения 1 и 0 в ваших данных, чтобы представить логическое значение.
Вам не нужно использовать какой-либо оператор сравнения для сравнения логического значения в предложении where.
Если ваш столбец "boolean" имеет имя is_selectable, ваше предложение where будет просто:
WHERE is_selectable
SQLite не имеет встроенного логического типа - вместо этого вам нужно использовать целое число. Кроме того, когда вы сравниваете значение с "TRUE" и "t", вы сравниваете его с этими значениями как строки, а не как логические или целые числа, и поэтому сравнение всегда терпит неудачу.
Источник: http://www.sqlite.org/datatype3.html
- > Это даст вам результат с ложным значением поля is_online
выберите * из device_master, где is_online!= 1
- > Это даст вам результат с истинным значением поля is_online
выберите * из device_master, где is_online = 1