& (按位和) (Azure 流分析)

在两个整数值之间执行按位逻辑 AND 运算,计算两个表达式中的每个对应位。

语法

expression & expression

参数

expression

数据类型位或 bigint 的任何有效表达式。 表达式被视为按位运算的二进制数。

返回类型

如果两 个输入值为 bit,则为 bit

如果一个或两个输入值为 bigint,则为 bigint

注解

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

为便于说明,170 的二进制表示形式为 0000 0000 1010 1010。 75 的二进制表示形式为 0000 0000 0100 1011。 对这两个值执行按位 AND 运算将生成二进制结果 0000 0000 0000 1010,即十进制数 10。

(170 & 75)
0000 0000 1010 1010
0000 0000 0100 1011
-------------------
0000 0000 0000 1010

需要指出的是,将 FLOAT 值强制转换为 BIGINT,并对其应用按位运算符通常不会返回与将其转换为 BIT 并应用相同运算符相同的结果:

  • 第一个选项:170 & 75.0 => 170 & 75 = 10
  • 第二个选项:170 & 75.0 => 170 & 1 = 0

有关转换为位的规则,请参阅 数据类型概述

示例

使用通用输入数据集:

WITH MyCTE AS (
	SELECT
		CAST(0 AS BIT) AS bit0,
		CAST(1 AS BIT) AS bit1,
		CAST(NULL AS BIT) AS bitN,
		CAST(0 AS BIGINT) AS bigint0,
		CAST(1 AS BIGINT) AS bigint1,
		CAST(NULL AS BIGINT) AS bigintN
	FROM input
)

表达式上应用 运算符:

SELECT
	bit0,
	bit1,
	bitN,
	bit0 & bit0 AS AND00,
	bit0 & bit1 AS AND01,
	bit1 & bit0 AS AND10,
	bit1 & bit1 AS AND11,
	bitN & bit0 AS ANDnull
INTO bitAND
FROM MyCTE

返回:

bit0 bit1 bitN AND00 AND01 AND10 AND11 ANDnull
false true Null false false false true Null

bigint 表达式上应用 运算符:

SELECT
	bigint0,
	bigint1,
	bigintN,
	bigint0 & bigint0 AS AND00,
	bigint0 & bigint1 AS AND01,
	bigint1 & bigint0 AS AND10,
	bigint1 & bigint1 AS AND11,
	bigintN & bigint1 AS ANDnull,
    170 & 75 AS ANDvalues
INTO bigintAND
FROM MyCTE

返回:

bigint0 bigint1 bigintN AND00 AND01 AND10 AND11 ANDnull ANDvalues
0 1 Null 0 0 0 1 Null 10

验证 输出类型

SELECT
    GetType(bit0 & bit0) AS ANDtype_bit,
    GetType(bigint0 & bigint0) AS ANDtype_bigint,
    GetType(bit0 & bigint0) AS ANDtype_mixed
INTO typesAND
FROM MyCTE

返回:

ANDtype_bit ANDtype_bigint ANDtype_mixed
bit bigint bigint

另请参阅