What does “&” means in this sql where clause?

后端 未结 5 712
长情又很酷
长情又很酷 2021-01-24 20:29

What does the \"&\" mean here:

select pt.TrTp, sum(pt.TrTp)
from ProdTr pt
where TransSt & 16 <> 16  // this is the row that i don´t understand..
g         


        
相关标签:
5条回答
  • 2021-01-24 20:46

    It's a bitwise AND.

    The & bitwise operator performs a bitwise logical AND between the two expressions, taking each corresponding bit for both expressions. The bits in the result are set to 1 if and only if both bits (for the current bit being resolved) in the input expressions have a value of 1; otherwise, the bit in the result is set to 0.

    From http://msdn.microsoft.com/en-us/library/ms174965.aspx

    In this case it's used with a flag, where multiple values are stored in one field and then the bitwise AND operation is used to check for specific states - or in this particular case - check that the field doesn't contain the specified state.

    0 讨论(0)
  • 2021-01-24 20:49

    This is bitwise AND. It simply checks if bit 4 in value is NOT set.

    I would rewrite this expression as TransSt & 16 = 0

    0 讨论(0)
  • 2021-01-24 20:52

    It's called a bitmask. It is used in situations where the individual bits in a number have different meanings, as opposed to a number just meaning the number itself (for instance, if you save your age to the database).

    When you imagine any number in it's binary form and want to test if a certain bit in the number is set, you test it by using the binary AND operator with the number and the bit you want to test, like this:

    if (number & 16 == 16)
    

    In binary, this means the following (assuming, your number is 25):

    if (00011001 & 00010000 == 00010000)
    

    Here you can see, that the digits at the bit 5 (counted from the bottom up) are both 1, therefor the resulting number has a 1 at that bit. As there are no other 1s, the resulting number is 16 exactly when both numbers have a 1 at this position.

    I would like to add: It's usually bad practice to encode different meanings into one database field. It's difficult to index and retrieve by an index, and depending on your DBMS might even be completely unindexed.

    0 讨论(0)
  • 2021-01-24 20:58

    It's a bitwise AND operator.

    A bitwise operation operates on one or more bit patterns or binary numerals at the level of their individual bits. It is a fast, primitive action directly supported by the processor, and is used to manipulate values for comparisons and calculations. On simple low-cost processors, typically, bitwise operations are substantially faster than division, several times faster than multiplication, and sometimes significantly faster than addition. While modern processors usually perform addition and multiplication just as fast as bitwise operations due to their longer instruction pipelines and other architectural design choices, bitwise operations do commonly use less power/performance because of the reduced use of resources.

    From http://en.wikipedia.org/wiki/Bitwise_operation

    0 讨论(0)
  • 2021-01-24 21:07

    It's bitwise AND. Please refer to this MSDN Article.

    0 讨论(0)
提交回复
热议问题