Ant*_*lay 6 sql bit-manipulation
我正在重新开发一个应用程序,并且已经找到了这个sql语句,该|角色在这一部分做了什么(au.ExNetBits | 8),我以前没见过,在网上找不到任何答案?
SELECT au.AccountID,au.ExNetBits FROM AccountUser au (NOLOCK)
WHERE au.CDAGUserId=102 and (au.ExNetBits | 8) = au.ExNetBits
从MSDN文档中,
在两个指定的整数值之间执行按位逻辑或运算,该整数值转换为Transact-SQL语句中的二进制表达式。
...
按位| 运算符在两个表达式之间执行按位逻辑“或”运算,并取两个表达式的每个对应位。如果输入表达式中的任一位或两个位(对于要解析的当前位)的值均为1,则结果中的位设置为1;否则,将结果中的位设置为1。如果输入表达式中的任何一位都不为1,则结果中的位设置为0。
如果左右表达式具有不同的整数数据类型(例如,左表达式为smallint,右 表达式为int),则较小数据类型的参数将转换为较大数据类型。在此示例中,smallint 表达式被转换为int。
例如,看这个小提琴,
SELECT 1 | 1, 1 | 2, 2 | 4, 3 | 5;
Run Code Online (Sandbox Code Playgroud)
输出
1 3 6 7
Run Code Online (Sandbox Code Playgroud)
为了解释这种行为,您必须考虑操作数的位模式,
00000001 = 1
| 00000001 = 1
_______________
00000001 = 1
Run Code Online (Sandbox Code Playgroud)
00000001 = 1
| 00000010 = 2
_______________
00000011 = 3
Run Code Online (Sandbox Code Playgroud)
00000010 = 2
| 00000100 = 4
_______________
00000110 = 6
Run Code Online (Sandbox Code Playgroud)
00000011 = 3
| 00000101 = 5
_______________
00000111 = 7
Run Code Online (Sandbox Code Playgroud)