Passende Bitmasken mit bitstrings (statt ints) in der SQL
Fand ich eine großartige Ressource hier (
Vergleich von zwei Bitmasken in SQL, um zu sehen, ob die Teile zueinander passen
) zum durchführen von suchen in einer SQL-Datenbank, wo du bist Speicherung von Daten mit mehreren Eigenschaften unter Verwendung von bit-Masken. In dem Beispiel zwar alle Daten gespeichert als int-Werte und die where-Klausel scheint zu funktionieren nur mit ints.
Gibt es eine einfache Möglichkeit zu konvertieren, die einen sehr ähnlichen Testfall für die Verwendung der vollständigen bitstrings statt? Anstatt also ein Beispiel wie:
with test (id, username, roles)
AS
(
SELECT 1,'Dave',1
UNION SELECT 2,'Charlie',3
UNION SELECT 3,'Susan',5
UNION SELECT 4,'Nick',2
)
select * from test where (roles & 7) != 0
stattdessen mit etwas wie:
with test (id, username, roles)
AS
(
SELECT 1,'Dave',B'001'
UNION SELECT 2,'Charlie',B'011'
UNION SELECT 3,'Susan',B'101'
UNION SELECT 4,'Nick',B'110'
)
select * from test where (roles & B'001') != 0
Kann ich hin und her konvertieren, aber es ist einfacher zu visualisieren, die mit der tatsächlichen bitstrings. Für meine einfachen Umbau (oben), bekomme ich eine Fehlermeldung, dass der Betreiber nicht für bitstrings. Gibt es eine andere Möglichkeit dies einzurichten, die funktionieren würde?
SQL
ist ein Oberbegriff für structured query language. Was DBMS verwenden Sie? String & Bitweise Operatoren variieren je nach DBMS.- Ich bin mit Postgres
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit wäre, einfach ein
bit-string
auf der rechten Seite des Ausdrucks, zu:Oder Sie werfen kann, ist eine
integer 0
zubit(3)
Vielleicht interessiert in diesem Zusammenhang die Antwort, die zeigt eine Reihe von Möglichkeiten zum konvertieren zwischen
boolean
,bit string
undinteger
:Kann ich konvertieren, eine Reihe von boolean-Spalten, um eine einzelne bitmap in PostgreSQL?
Sich bewusst sein, dass die Speicherung der Daten als
integer
können etwas Platz sparen.integer
muss 4 bytes für bis zu 32 bit an Informationen, während Sie - ich zitiere die Handbuch an besagter Stelle: