SQL Server布尔运算符

时间:2012-06-21 09:20:51

标签: sql-server-2005

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

我的问题是布尔表达式的评估。例如,如果我有声明

expr1 AND expr2

如果expr1为true且expr2为false,那么它们是否在内部评估为值为1和0的BIT?然后AND运算符检查BIT?

我认为情况并非如此,因为以下情况应该有效:

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

报告

Msg 4145,Level 15,State 1,Line 1 在预期条件的上下文中指定的非布尔类型的表达式,靠近'和'。

这意味着内部sql server将表达式作为布尔值处理,但为什么不能访问该数据类型。

2 个答案:

答案 0 :(得分:3)

SQL Server确实有Boolean数据类型。您可以打开Logical Operators (Transact-SQL)手册页并找到以下声明:

  

逻辑运算符测试某些条件的真实性。逻辑运算符(如比较运算符)返回值为TRUE,FALSE或UNKNOWN的 Boolean 数据类型。

只是您不能像使用其他Transact-SQL数据类型一样使用此类型。例如,您不能声明布尔变量或参数,向表中添加布尔列,从布尔值转换为布尔值。但是你可以拥有布尔表达式并在需要它们的上下文中使用它们(WHEREON,检查约束......)。您还可以将布尔运算符应用于这些表达式:ANDNOT等。 (<=LIKE等运算符也可以被认为是布尔值,因为它们返回布尔结果,但它们的操作数实际上从不布尔值。)

因此,总而言之, 是SQL Server中的布尔类型,但其使用受到限制,如上所述。为什么?我的回答可能很愚蠢,对不起,但那是我满意的:这就是他们选择它的方式。

答案 1 :(得分:0)

逻辑运算符导致true或false。因此,在您的示例中,如果expr1expr2为真,则会得到结果。检查它的真实与否是你为每个表达式做的操作。

所以你比较一下反对类似值column_bit = 0之类的列,这会导致true或false。 如果您的expr1为真且expr2为false,则逻辑AND运算符的结果为false。

编辑:

您的select 1 where 1 and 0无法使用,因为您没有使用比较运算符。 1 = 1 AND 0 = 0工作,例如但是废话:)