Ich muss den Wert einer bestimmten Spalte in Postgre ändern, aber ich habe noch nie mit Maskenbits gearbeitet, (es ist ein Legacy-Code). Der aktuelle Wert ist 1, aber es ist als eine ganze Zahl maskbit gespeichert, so, wenn ich versucheSetzen Sie 0 in einem Integer-Maskbit auf Postgresql
update table set field=0 where ...
viel zu tun Es ist nicht und es hält mich zurückkehr 1. Also las ich die Dokumentation und versucht, eine zu tun ist:
update table set field=field&0 where ...
Aber es hat nicht funktioniert auch. Dann habe ich versucht, alle 30 Bits zu decken, ohne Erfolg zu:
update table set field=field&0000000000000000000000000000000 where ...
Kann jemand bitte zeigen Sie mir, wie man richtig den Wert einer ganzen Zahl maskbit auf postgresql ändern?
EDIT: Ich fand this case here in StackOverflow
UPDATE users SET permission = permission & ~16
welche die gesehen, die am nächsten verminen so habe ich versucht,
UPDATE table SET field = field & ~1
, denn das ist das einzige Bit ich aber immer noch aktiv zu deaktivieren, zu tun haben, und Neuabstimmung 1, wenn ich eine SELECT
Ich habe mit einem Versuch, den ich tat, bearbeitet. Die Verwendung von 'UPDATE table SET field = field & ~ 1' gibt mir immer noch 1 zurück, und wenn ich versuche, es als Bit String zu verwenden, gibt postgre Fehler beim Casting in der Update-Abfrage zurück. –
Sie müssen Ihre '1' auf den richtigen Bitstring-Typ wie' ~ (1 :: bit (5)) 'umsetzen, außer dass die' 5' wahrscheinlich geändert werden muss. Geben Sie '\ d Tabellenname' in psql ein um den richtigen Typ für Ihr Feld zu sehen. – NovaDenizen
Nun, es ist eine ganze Zahl, so habe ich versucht, 'update Tabellensatz Feld = Feld & ~ (1 :: Bit (32)), wo ...' aber erhielt den Fehler "Operator existiert nicht: integer & Bit" Also habe ich versucht 'update Tabellensatz Feld = Feld & ~ (1 :: Bit (32)) :: integer wo ...' Welche ‚Query zurückgegeben erfolgreich zurückgegeben: eine Zeile betroffen, 166 ms Ausführung Zeit.' Aber das Feld gibt immer 1 zurück, wenn ich SELECT –