Ich habe ein kleines Problemchen :-)! Ich habe in meiner Datenbank ein Feld des Typs bit(10). Dort hat es also Einträge der Form 1001010010. Ich würde nun gerne über einen SQL (mit oder ohne Funktion) herausfinden, wieviele Einsen es in den einzelnen Einträgen hat, repektive, wie gross die Summe der Einsen ist. Schlussendlich muss es eine Bestimmte Zahl ergeben. Kann mir da jemand weiterhelfen. Ich bin leicht überfordert.
Das ist genau mein Problem. Ich weiss nicht, wie ich ein Bit-Array in Textform umwandeln kann. Kannst du mir da einen Input geben. Ich verwende Postgre erst seit etwa 1er Wochen und bin immer noch am einarbeiten.
Ja, es fehlt ein ‘einfacher’ CAST von Bit-String nach TEXT. Aber PG wäre nicht PG, wenn es nicht doch einen Weg gäbe:
create or replace function count_bits (IN b bit(10), OUT count int) returns int as $$
declare
c int;
_count int;
begin
_count:= 0;
for c in 0..9 loop
if substring(b,c,1) = '1' then _count := _count + 1; end if;
end loop;
count := _count;
return;
end;
$$ language plpgsql immutable strict;
test=*# \d bit
Table "public.bit"
Column | Type | Modifiers
--------+---------+-----------
b | bit(10) |
test=*# select b, count_bits(b) from bit;
b | count_bits
------------+------------
1100110010 | 5
(1 row)