我试图理解逻辑操作的优先级顺序,并有以下代码:
declare @T bit ='TRUE'
declare @F bit ='False'
print @T and @F它返回一个错误,如
关键字‘和’附近的语法不正确。
我将' and‘替换为'&',代码又起作用了。为什么以前的代码不起作用?我使用的是SQL服务器。
发布于 2017-01-01 17:55:52
print @T & @F返回0
&是按位和运算符。
按位运算符执行按位逻辑,并在两个表达式之间执行,取两个表达式的每个对应位。结果中的位被设置为1当且仅当输入表达式中的两个位(对于正在解析的当前位)的值为1;否则,结果中的位被设置为0。
在您的示例中,@T & @F解析为1 & 0,因此返回带有值0的数据类型BIT的结果。
当传递给PRINT操作符时,这个bit结果被隐式转换为string,并将结果输出到客户端。
print @T and @F它有很大的问题。
组合两个布尔表达式,并在两个表达式都为真时返回TRUE。
bit与布尔值不一样。它们是不可互换的,而且Server不会在需要时隐式地将bit转换为布尔数据类型( Server不实现Server布尔数据类型。)
所以您需要使用如下的表达式
@T = 'TRUE' AND @F = 'TRUE'而不是
@T and @F即使这样,您的问题也没有结束- PRINT无论如何都不接受布尔表达式。您可以使用CASE中的表达式如下所示。
PRINT CASE
WHEN (@T = 'TRUE' AND @F = 'TRUE') THEN 'True'
WHEN NOT (@T = 'TRUE' AND @F = 'TRUE') THEN 'False'
ELSE 'Unknown' -- SQL uses three valued logic
ENDhttps://dba.stackexchange.com/questions/159697
复制相似问题