Подтвердить что ты не робот

Как использовать логическое поле в предложении where в SQLite?

Кажется, это глупый вопрос, и все же. Это может быть моя 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.

4b9b3361

Ответ 1

SQLite не имеет логического типа: Какие типы данных поддерживает SQLite?

Записанная строка как она должна работать, просто используйте целые значения 1 и 0 в ваших данных, чтобы представить логическое значение.

Ответ 2

Вам не нужно использовать какой-либо оператор сравнения для сравнения логического значения в предложении where.

Если ваш столбец "boolean" имеет имя is_selectable, ваше предложение where будет просто: WHERE is_selectable

Ответ 3

SQLite не имеет встроенного логического типа - вместо этого вам нужно использовать целое число. Кроме того, когда вы сравниваете значение с "TRUE" и "t", вы сравниваете его с этими значениями как строки, а не как логические или целые числа, и поэтому сравнение всегда терпит неудачу.

Источник: http://www.sqlite.org/datatype3.html

Ответ 4

- > Это даст вам результат с ложным значением поля is_online

выберите * из device_master, где is_online!= 1

- > Это даст вам результат с истинным значением поля is_online

выберите * из device_master, где is_online = 1