“和”与“&”之间的区别


13

我试图了解逻辑运算的优先顺序,并具有以下代码:

declare @T bit ='TRUE'
declare @F bit ='False'

print @T and @F

它返回错误为

关键字“和”附近的语法不正确。

我用“&”替换了“ and”,并且代码再次起作用。以前的代码为什么不起作用?我正在使用SQL Server。

Answers:


29
print @T & @F

退货 0

&按位AND运算符。

&按位运算符在两个表达式之间执行按位逻辑与,并取两个表达式的每个对应位。当且仅当输入表达式中的两个位(对于要解析的当前位)的值都为1时,结果中的位才设置为1;否则,将结果中的位设置为1。否则,结果中的位设置为0。

在您的情况下@T & @F解析为1 & 0,因此返回BIT具有值的数据类型的结果0

当传递给PRINT运算符时,此bit结果将隐式转换为字符串,并将结果输出到客户端。


print @T and @F

有很多错误。

AND

合并两个布尔表达式,并且当两个表达式均为TRUE时返回TRUE

bit与boolean不同。它们不可互换,并且bit在需要时SQL Server不会隐式转换为布尔数据类型(SQL Server不实现SQL布尔数据类型。)。

因此,您需要使用类似

@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
      END

感谢您的回答!我真的从中学到了很多!
杰森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.