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

后端 未结 5 711
长情又很酷
长情又很酷 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: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.

提交回复
热议问题