什么&这个TSQL查询中的符号是什么意思?

时间:2014-02-03 19:58:13

标签: sql sql-server tsql rightfax

我一直在处理一些报告,最近发现了一个我一直在查询的系统的小指南。它提供的部分语法如下:

... "WHERE [FIELD] & [VALUE] = [VALUE]"

即:... "WHERE flags & 16 = 16"

我只是好奇这个语法是什么意思...我得到的东西像WHERE flags = 16,但不是'& 16 = 16'部分。有任何澄清吗?

引用文章:http://rightfaxapi.com/advanced-sql-for-manipulating-faxes/

谢谢你, 韦斯

2 个答案:

答案 0 :(得分:5)

&正在做一点“和”。因此,只有当两个位都为1时才为“1”。整体逻辑检查value中的所有位是否都在field中设置。

例如,请考虑value是:

0000 0101

然后,如果字段是

1111 1111

&是:

0000 0101

1只是两者都是1。)

这与value相同。所以,这传递了条件。

如果field是:

0001 1110

然后&是:

0000 0100

这与value不同,因此它不会通过条件。

答案 1 :(得分:2)

&是按位AND。在您的示例中,掩码为16(0x0010,二进制0000 0000 0001 0000)。 AND操作的结果将为0(掩码中的所有位未设置)或掩码值(掩码ARE中的​​所有位都设置)。所以你的where A&16 = 16表达式正在测试是否设置了从右边算起的整数值的第5位。

示例:

  • 48 & 16 = 16为TRUE:

        48 (binary: 0000 0000 0011 0000)
    AND 16 (binary: 0000 0000 0001 0000)
        -- -----------------------------
        16 (binary: 0000 0000 0001 0000)
    
  • 33 & 16 = 16为FALSE:

        33 (binary: 0000 0000 0010 0001)
    AND 16 (binary: 0000 0000 0001 0000)
        -- -----------------------------
         0 (binary: 0000 0000 0000 0000)
    

容易!