Logische Operationen mit Bitstring Typen, korrekte Syntax?

Hallo liebes Forum,
Ich bin ein Bioinformatik Student.
Für mein Projekt benutze ich die PostgresQL Datenbank 8.1.2.

Meine Anwendung ist in C geschrieben und ich benutze das standardmäßige
C Client API mit der libpq-fe.

Nun zu meinem (kleinem) Problem:
Für die Suche in Moleküldatenbanken benutze ich häufig Bitstrings,
also die Typen bit(n) und bit varying(n). Nun möchte eine einfache Anfrage ausführen, der Art, dass alle Zeilen ausgegeben werden sollen bei denen alle
Bits gemeinsam mit einem Anfragebitstring (bit1) auf eins stehen.
Beispiel:

CREATE TABLE table1 (name VARCHAR(255), bitstring bit(10100));
SELECT name FROM table1 WHERE bit1 & bitstring = bit1;

[/size] erzeugt nur eine leere Zeile. Im Code folgt eine Syntax-Fehlermeldung. Weiss jemand ob es eine andere Anfrage fuer
das gleiche Ergebnis gibt?

Gibt es ausserdem eine Möglichkeit die Anzahl der gesetzten Bits in einem Bitstring zu zählen?
Ich weiss, dass es bei einer anderen Datenbank (beginnt mit M…) eine Funktion bits_set() gibt.
Vielleicht gibt es ja die Möglichkeit eine Funktion in PL/pgSQL oder direkt in C zu implementieren.

Wenn mir jemand die korrekte interne Repräsentation der Typen bit und bit varying erläutern könnte, dann könnte ich anhand eines Beispiels.
selbst so etwas implementieren und ins Forum stellen.

Danke schon mal fuer die Muehen.

Hallo Bioinfi,

mit PgAdmin hast Du eine Möglickeit Deine Befehle einzeln auszutesten. Ich vermute mal das der Syntaxfehler schon im Befehl CREATE TABELLE liegt. Der Syntax scheint hier nicht richtig zu sein. Schau Dir die Abschnitte über den BIT-Type nochmals in der Doku an. Auch Beispiel sind dort aufgeführt. Es gibt auch spezielle Funktionen für den Type BIT.



mfg

fristo

Hmm vielleicht sollte ich mal direkt Peter Eisentraut fragen? :lol:

Mein erstes Problem ist bereits geloest. Es wurde hier falsch geklammert.

In die Doku habe ich natuerlich schon geschaut, aber es gibt wie gesagt keine Funktion zum Zaehlen der Bits.

Any Developers in the House?

Bye