View Full Version : Bitmaskierung über SQL in DB2
in MySQL existiert die Funktion "&", mit der festgestellt werden kann, ob ein bestimmtes Bit einer Integerzahl gesetzt ist; z.B. mit x&power(2,4)=power(2,4) kann man feststellen, ob Bit 4 gesetzt ist, wobei x eine Integerzahl ist. Gibt es in DB2 eine entsprechende Funktion bzw. wie könnte man dies anders erledigen?
LAND(MYVAR, X'0080') = X'0080'
Mit "LAND" werden Strings verarbeitet; ich habe jedoch Integer- bzw. gezonte Zahlen. Was bedeutet in diesem Zusammenhang X'0080'?
mit LAND kann jedes Feld verknüpft werden.
X'....' bezeichnet eine Hex-Konstante, in diesem Fall X'0080' = Bit 4 an, alle anderen aus.
Die X-Konstante muss allerdings so lang sein, wie das zu verknüpfende Feld. Ggf. ist links also mit Nullen aufzufüllen.
Belegt dein Feld z.B. 4 Byte, so ist mit X'00000080' zu verknüpfen.
vielen Dank für die Erläuterung;
aber mein SQL-Select bringt mir hier:
"Argument 1 der Funktion LAND ungültig" ...
und Argument 1 ist wie gesagt mit 20,0 numerisch gezont definiert.
Und ist Hex'0080' bei einem 2-Byte-Wort nicht Bit 8?
Oder stehe ich auf der Leitung?
Nochmals Dankeschön vorab für diese Klärung.
Die IBM-Speicherung speichert HIWORD, LOWORD, HIBYTE, LOBYTE und nicht wie Intel-CPU's in LOxxx, HIxxx.
Kann sein, dass LAND erst ab V5R3 auch numerische Felder erlaubt.
Du kannst aber auch mit LAND(HEX(MYFIELD), '0080') verknüpfen. Das Ganze wird dann halt als Zeichenkette betrachtet, funktioniert aber ebenso.
Probier's einfach mal mit
select HEX(MYFIELD), LAND(HEX(MYFIELD), '00000000000000000080')
from ...