SQL Server的布尔运算符(SQL Server boolean operators)

2019-10-16 21:04发布

我知道,SQL Server没有布尔数据类型和你最好的选择是使用BIT数据类型。

我的问题是什么布尔表达式评价。 例如,如果我有说法

expr1 AND expr2

如果表达式1的真实,expr2的是假的,他们做内部评估与值1和0的位? 然后AND运算符检查双边?

我想,这是不是因为那么下面应该工作的情况:

select 1 where 1 and 0

所以做的SQL Server内部有一个布尔数据类型?

下面的工作

select 1 where 1 = 0
select 1 where 1 = 0 and 0 = 0

但是这个

select 1 where 1 and 0

报告

消息4145,级别15,状态1,行1中的上下文指定的非布尔型,其中一个条件是预期的,邻近“和”的表达式。

这意味着内部SQL服务器处理的表达式为布尔值,但为何没有访问这些数据类型。

Answer 1:

SQL服务器确实有一个Boolean数据类型。 您可以打开的逻辑运算符(Transact-SQL)手册页,找到下面的语句:

逻辑运算符测试的一些条件的真相。 逻辑运算符,如比较运算符,返回一个布尔数据类型与TRUE,FALSE,或者UNKNOWN的值。

只是,你不能以同样的方式使用这种类型的,你可以使用其他的Transact-SQL数据类型。 举例来说,你不能声明布尔变量或参数,添加布尔列的表,转换为/从一个布尔值。 但你可以有布尔表达式 ,并在那里他们被要求(在上下文中使用它们WHEREON ,检查约束...)。 您还可以将布尔运算符来这些表达式: ANDNOT等。 (运营商像<=LIKE等也可以被认为是布尔值,在这个意义上,他们返回布尔结果,但它们的操作数实际上从未布尔)。

因此,要总结, SQL Server中的布尔类型,但它的使用是有限的,如上所述。 为什么? 我的回答可能是一个愚蠢的一个,很抱歉,但是这是一个我很满意:这是他们选择了它要的方式。



Answer 2:

逻辑运算符的结果真的还是假的。 因此,在您的例子中,你得到的结果,如果expr1expr2为真。 要检查其真实与否是你每个表情做了手术。

所以,你对类似的位值比较如列column_bit = 0 ,这导致真还是假。 如果expr1为真, expr2是假的你的结果是逻辑AND运算错误。

编辑:

select 1 where 1 and 0不行,因为你不使用一个比较操作。 1 = 1和0 = 0的作品,例如但其废话:)



文章来源: SQL Server boolean operators