【问题标题】:What does the & symbol mean in this TSQL query?这个 TSQL 查询中的 & 符号是什么意思?
【发布时间】:2014-02-27 11:32:21
【问题描述】:

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

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

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

我只是好奇这个语法是什么意思......我得到了 WHERE flags = 16 之类的东西,但不是 '&16 = 16' 部分。有什么说明吗?

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

谢谢, 韦斯

【问题讨论】:

  • 没有任何上下文,标题“用于操作传真的高级 SQL”有点可怕。
  • 比如“用 JavaScript 制作花生酱三明治”:)
  • 哈哈。对不起迈克尔。它适用于一个名为 RightFax 的系统。它将传真详细信息存储在 SQL Server 数据库中。

标签: sql sql-server tsql rightfax


【解决方案1】:

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

例如,考虑value 是:

0000 0101

如果字段是

1111 1111

& 是:

0000 0101

1s 仅在两者都是 1 的情况下。)

这与value 相同。所以,这通过了条件。

现在如果field 是:

0001 1110

那么&就是:

0000 0100

而且这与value不同,所以它没有通过条件。

【讨论】:

  • 谢谢戈登。非常感谢您的解释。
【解决方案2】:

& 是按位与。在您的示例中,您的 mask 为 16(0x0010, binary 0000 0000 0001 0000 )。 AND 操作的结果将是 0(未设置掩码中的所有位)或掩码值(设置掩码中的所有位)。因此,您的 where A&16 = 16 表达式正在测试是否设置了整数值的第 5 位(从右数)。

例子:

  • 48 & 16 = 16 为真:

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

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

简单!

【讨论】:

    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多