这是在SQL中进行布尔testing的正确方法吗?

假设active是一个“布尔字段”(tiny 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' 

如果你想使用整数值,你必须把它看作一个string。 你不能使用整数值。

 select * from users where active = 1 -- Does not work select * from users where active = '1' -- Works 

MS SQL 2008也可以使用string版本的true或false …

 select * from users where active = 'true' -- or -- select * from users where active = 'false' 

在SQL Server中,您通常会使用。 我不知道其他数据库引擎。

 select * from users where active = 0 

我个人比较喜欢使用值为'Y'和'N'的char(1)来表示没有布尔types的本地types的数据库。 字母比用户更容易使用,假设读者现在将1对应为真,0对应于假。

当使用(N)Hibernate时,“Y”和“N”也很好地映射。

PostgreSQL支持布尔types,所以你的SQL查询将在PostgreSQL中完美工作。

如果你使用SQLite3小心:

它只需要“t”或“f”。 不是1或0.不是真或假。

刚刚学会了艰辛的道路。