BITAND , BITANDNOT , BITOR , BITXOR 和 BITNOT 标量函数
这些按位函数对输入自变量的整数值的 "两人的补码" 表示进行运算,并根据输入自变量的数据类型将结果作为数据类型中相应的基本 10 整数值返回。
该模式是 SYSIBM。
| 函数 | 描述 | 两者对结果的补码表示中的一点是: |
|---|---|---|
| BITAND | 执行按位 AND 运算。 | 1 仅当两个自变量中的相应位都是 1 时。 |
| bitAndNot | 清除第一个自变量中位于第二个自变量中的任何位。 | 如果第二个自变量中的相应位为 1 ,那么为零; 否则,将从第一个自变量中的相应位复制结果。 |
| BITOR | 执行按位 OR 运算。 | 1 ,除非两个自变量中的对应位均为零。 |
| BITXOR | 执行按位独占 OR 操作。 | 1 ,除非两个自变量中的相应位相同。 |
| BITNOT | 执行按位 NOT 操作。 | 与自变量中的相应位相反。 |
- 表达或 expression1 或 expression2
- 自变量必须是由数据类型 SMALLINT , INTEGER , BIGINT 或 DECFLOAT 表示的整数值。 类型为 DECIMAL , REAL 或 DOUBLE 的自变量将强制类型转换为 DECFLOAT。 该值将截断为整数。
对于 SMALLINT ,位操作函数最多可以在 16 位上运行,对于 INTEGER ,可以在 32 位上运行,对于 BIGINT ,可以在 64 位上运行,对于 DECFLOAT ,可以在 113 位上运行。 支持的DECFLOAT值范围包括从 -2112 到2 112 -1 的整数,不支持特殊值,如 NaN 或INFINITY(SQLSTATE 42815)。 如果两个自变量具有不同的数据类型,那么支持更少位的自变量将强制转换为具有支持更多位的自变量的数据类型的值。 此强制类型转换会影响为负值设置的位。 例如 -1 作为SMALLINT值时,有16位被置为1,当转换为INTEGER值时,有32位被置为1。
具有两个自变量的函数的结果具有提升的数据类型优先顺序列表中最高的自变量的数据类型。 如果任一自变量为 DECFLOAT ,那么结果的数据类型为 DECFLOAT (34)。 如果任一自变量可以为空,那么结果可以为空; 如果任一自变量为空,那么结果为空值。
BITNOT 函数的结果与输入参数具有相同的数据类型,但 DECIMAL , REAL , DOUBLE 或 DECFLOAT (16) 返回 DECFLOAT (34)。 如果自变量可以为空,那么结果可以为空;如果自变量为空,那么结果为空值。
由于数据类型之间和不同硬件平台上的内部表示存在差异,因此使用函数 (例如 HEX) 或主语言构造来查看或比较 BIT 函数结果和自变量的内部表示是数据类型相关且不可移植的。 查看或比较 BIT 函数结果和自变量的独立于数据类型和平台的方法是使用实际整数值。
建议使用 BITXOR 函数来切换值中的位。 使用 BITANDNOT 函数来清除位。 BITANDNOT (VAL , PATTERN) 比 BITAND (val , BITNOT (pattern)) 运行效率更高。
示例
以下示例基于具有类型为 INTEGER 的 PROPERTIES 列的 ITEM 表。
- 示例 1: 返回为其设置了第三个属性位的所有项。
SELECT ITEMID FROM ITEM WHERE BITAND(PROPERTIES, 4) = 4 - 示例 2: 返回为其设置了第四个或第六个属性位的所有项。
SELECT ITEMID FROM ITEM WHERE BITAND(PROPERTIES, 40) <> 0 - 示例 3: 清除标识为 3412 的项的第十二个属性。
UPDATE ITEM SET PROPERTIES = BITANDNOT(PROPERTIES, 2048) WHERE ITEMID = 3412 - 示例 4: 设置标识为 3412 的项的第五个属性。
UPDATE ITEM SET PROPERTIES = BITOR(PROPERTIES, 16) WHERE ITEMID = 3412 - 示例 5: 切换标识为 3412 的项的第十一个属性。
UPDATE ITEM SET PROPERTIES = BITXOR(PROPERTIES, 1024) WHERE ITEMID = 3412 - 示例 6: 切换只有第二个位的 16 位值中的所有位。
返回 -3 (数据类型为SMALLINT)。VALUES BITNOT(CAST(2 AS SMALLINT))
