4

我已经阅读了有关按位 OR 的信息,它似乎与 OR 的功能相同,只是它更快。

我读了https://msdn.microsoft.com/en-us/library/ms186714(v=sql.110).aspx

这是他们给出的例子:

USE tempdb;
GO

SELECT a_int_value | b_int_value
FROM tableName

这预计将如何运行?这是没有意义的,你不能在 select 语句中有 OR

1)我错过了什么吗?2) 可以肯定地说,如果我的比较表达式是整数类型,我应该总是使用按位或吗?(这是因为按位 OR 更快并且仅适用于整数比较?)

4

2 回答 2

4

我对这种 SQL 风格没有太多经验,但是按位 OR 与 WHERE 语句中的 OR 子句不同。

按位或将整数的每一位进行或运算以产生一个新的整数。例如,数字 2 和 9 可以用二进制表示为 0010 和 1001。因此

0010 | 1001 = 1011

换句话说

2 | 9 = 11

该| 您的语句中的运算符正在对结果执行此操作。

请注意,此操作不等同于加法,即

5(0101) | 3(0011) = 7(0111)
于 2015-05-29T15:55:48.830 回答
3

OR是中缀逻辑运算符。它接受两个布尔表达式作为参数并返回 TRUE、FALSE 或 UNKNOWN。Boolean 是 SQL Server 中的一种特殊类型;它只能间接使用。例如,您不能创建具有布尔数据类型的列或变量。它仅用于 SQL Server 内部的逻辑处理,通常在 WHERE 子句中。

|是中缀位运算符。它采用两个整数、BIT、BINARY 或 VARBINARY 表达式(只允许一个 BINARY 或 VARBINARY)作为参数返回一个整数结果(或 NULL)。位运算适用于数据表达式。

查看文档中有关按位 OROR.

于 2015-05-29T16:07:50.580 回答