Ответ 1
Логическое значение в SQL является битовым полем. Это означает, что 1 или 0. Правильный синтаксис:
select * from users where active = 1 /* All Active Users */
или
select * from users where active = 0 /* All Inactive Users */
Предположим, что активным является "булево поле" (крошечный int, с 0 или 1)
# Find all active users
select * from users where active
# Find all inactive users
select * from users where NOT active
В словах, может ли оператор "NOT" применяться непосредственно к логическому полю?
Логическое значение в SQL является битовым полем. Это означает, что 1 или 0. Правильный синтаксис:
select * from users where active = 1 /* All Active Users */
или
select * from users where active = 0 /* All Inactive Users */
С помощью Postgres вы можете использовать
select * from users where active
или
select * from users where active = 't'
Если вы хотите использовать целочисленное значение, вы должны рассматривать его как строку. Вы не можете использовать целочисленное значение.
select * from users where active = 1 -- Does not work
select * from users where active = '1' -- Works
MS SQL 2008 также может использовать строчную версию true или false...
select * from users where active = 'true'
-- or --
select * from users where active = 'false'
В SQL Server вы обычно используете. Я не знаю других двигателей баз данных.
select * from users where active = 0
Я лично предпочитаю использовать char (1) со значениями 'Y' и 'N' для баз данных, которые не имеют родного типа для boolean. Письма больше пользователей, чем числа, которые предполагают, что те, кто его читает, теперь будут соответствовать 1, а 0 соответствует false.
'Y' и 'N' также хорошо отображается при использовании (N) спящего режима.
PostgreSQL поддерживает логические типы, поэтому ваш SQL-запрос будет отлично работать в PostgreSQL.
Если вы используете SQLite3, будьте осторожны:
Требуется только "t" или "f". Не 1 или 0. Не ИСТИНА ИЛИ ЛОЖЬ.
Просто усердно учился.