这是在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.不是真或假。
刚刚学会了艰辛的道路。