【问题标题】:How does not | (Bitwise OR) work in SQL Server/SSIS 2012?怎么不| (按位或)在 SQL Server/SSIS 2012 中工作?
【发布时间】:2015-08-12 13:43:32
【问题描述】:

我已经阅读过有关按位 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 更快,并且只适用于整数比较?)

【问题讨论】:

  • 希望我能投票赞成你的答案,但我错过了几个代表点:(

标签: sql-server ssis bitwise-operators bitwise-or


【解决方案1】:

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

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

查看bitwise OROR 的文档中的示例。

【讨论】:

  • 感谢您的回答。我实际上在我的问题中给出了这些链接,我确实阅读了它们但没有得到它们。但是现在一旦阅读答案,我就会明白我的错误在哪里。谢谢
  • 希望我能投票赞成你的答案,但我错过了几个代表点:(
【解决方案2】:

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

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

0010 | 1001 = 1011

换句话说

2 | 9 = 11

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

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

5(0101) | 3(0011) = 7(0111)

【讨论】:

  • 不确定您是否要输入 &|或者只是 &,和 (0001) == 1,而不是 2。但是,是的,5 按位 AND 3 = 1
  • 确实是错字。大声笑实际上我弄错了,但我确实明白了这一点。谢谢!
猜你喜欢
  • 2015-04-03
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2014-12-11
  • 2017-01-06
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多