首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“与”的区别

“与”的区别
EN

Database Administration用户
提问于 2017-01-01 17:36:39
回答 1查看 3.6K关注 0票数 13

我试图理解逻辑操作的优先级顺序,并有以下代码:

代码语言:javascript
复制
declare @T bit ='TRUE'
declare @F bit ='False'

print @T and @F

它返回一个错误,如

关键字‘和’附近的语法不正确。

我将' and‘替换为'&',代码又起作用了。为什么以前的代码不起作用?我使用的是SQL服务器。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2017-01-01 17:55:52

代码语言:javascript
复制
print @T & @F

返回0

&按位和运算符。

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

在您的示例中,@T & @F解析为1 & 0,因此返回带有值0的数据类型BIT的结果。

当传递给PRINT操作符时,这个bit结果被隐式转换为string,并将结果输出到客户端。

代码语言:javascript
复制
print @T and @F

它有很大的问题。

AND

组合两个布尔表达式,并在两个表达式都为真时返回TRUE。

bit与布尔值不一样。它们是不可互换的,而且Server不会在需要时隐式地将bit转换为布尔数据类型( Server不实现Server布尔数据类型。)

所以您需要使用如下的表达式

代码语言:javascript
复制
@T = 'TRUE' AND @F = 'TRUE'

而不是

代码语言:javascript
复制
@T and @F

即使这样,您的问题也没有结束- PRINT无论如何都不接受布尔表达式。您可以使用CASE中的表达式如下所示。

代码语言:javascript
复制
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
票数 29
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/159697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档