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
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.