SQL 位运算,将倒数第二位变为0

SQL Bit operation, change second last bit to 0

我有很多行都带有 bigint(长度 20),我必须将每一秒的最后一位更改为 0。 例如我有:0101 1011 我需要的结果是:0101 1001 问题是,数字是 "random" 而我无法计算 -2(10).

您可以使用 "Bitwise And" 运算符更改位。

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/bitwise-operators-transact-sql?view=sql-server-2017

您可以使用按位与运算符 (&), ANDing with NOT 2 (created using the bitwise inversion operator (~)) 来获取结果,例如

CREATE TABLE test (num BIGINT(20));
INSERT INTO test VALUES
(4),
(91),
(9223372036854775807);
SELECT num, num & ~2 FROM test;

输出:

num                     num & ~2
4                       4
91                      89
9223372036854775807     9223372036854775805

Demo on dbfiddle