1

如上所述,sys.fn_IsBitSetInBitmask 在 SQL Server 中是如何工作的?请给我一个例子好吗?

4

1 回答 1

3

它表示二进制数中被翻转的点,因此由于二进制中的 111 是“7”(第 1、第 2 和第 3 位都打开)。然后让我们使用十六进制数 0x7 作为该函数中的第一个参数并检查 1 位

(我将在这里使用 convert() 到 varbinary 只是为了表明这是二进制数的表示,你不需要 convert() 函数)

       select sys.fn_IsBitSetInBitmask(convert(VARBINARY, 0x7),1) 

这会返回一些 <> 0(到目前为止,我只看到返回值是 2^(7+n),sys.fn_IsBitSetInBitmask 函数的第二个参数是 n)。另一个例子是,如果我们给出十六进制数 0xa,它等于二进制的 1010,然后第 4 位和第 2 位被翻转(有一个)。所以函数调用

     if   (sys.fn_IsBitSetInBitmask(convert(VARBINARY, 0xa),2)<> 0)
        if   (sys.fn_IsBitSetInBitmask(convert(VARBINARY, 0xa),4) <> 0)
           select 'sup son'

将返回'sup son'。只需从say中选择值

     select sys.fn_IsBitSetInBitmask(convert(VARBINARY, 0xa),4)

将返回一个值 2^(7+n) ,其中 n 为 4 所以 2^11 即 2048

于 2013-03-22T00:49:39.207 回答