Hi Richard,
Bei spalte=spalte&(b'01111'); wird eher problematisch, aber meinem Vorhaben eher egal, da ich genau weiß, wieviele Bits die Spalte hat.
Dir ist klar, dass diese Anweisung alle bits ausser 1,2,3,4 löscht?
Also 5 (wie beabsichtigt),6,7,... (wieviele auch immer drüber kommen)?
Das ist mir klar. Weil, ja nach links alles mit einer 0 gefüllt wird und somit alle Bits gelöscht werden.
Dann ist es OK...
Merke: nur mit 1 ver-und-ete Bits stehen nach der ver-und-ung noch auf ihrem ursprünglichen Wert.
Jepp. Zur Not mache ich es so, wie du es beschrieben hast, falls ich doch mal die Länge nicht kenne:
- stelle sicher, dass Bit 5 gesetzt ist:
update Tabelle set spalte = spalte | 16
- verwende nun xor mit dem fraglichen Bit:
update Tabelle set spalte = spalte ^ 16
Das kann man ja auch mit einer Query machen ne:
update Tabelle set spalte = spalte | 16, spalte = spalte ^ 16;
Oder
update Tabelle set spalte = (spalte | 16) ^ 16;
Was ich mich auch spontan gefragt habe, ob ich eine Spalte selektieren kann, in der ein bestimmtes gesetzt ist.
select blabla from Tabelle where spalte=(spalte&16)=16
Ja gut, damit will ich euch nicht nerven und diesen Threas missbrauchen, ich suche mal in der mySQL Doku.
Grüße