Thread: Addition and subtraction on BIT type
Hello, Is there a way to do addition and subtraction on BIT types? For example, for creat table test (a BIT(3)); insert into test values (B'101'); select a + 1 from test; fails and select a::smallint + 1 from test; also fails. In addition, is there a way to change the bit of a bit string? For example change a 1 to a 0 or vice versa. Any suggestions? Thanks, Yasir
Hello, I think I am almost at a solution to my last question. I can do select int4(a) from test; to convert to an integer. So now addition and subtraction can be done between bit types. But how do I convert back to BIT type? If I do select bit(int4(b'1001')); I get the following message: ERROR: parser: parse error at or near "int4" at character 12 Can anyone tell me why the bit function is not working? It's under the pg_catalog schema. Thanks, Yasir On Sun, 16 Nov 2003, Yasir Malik wrote: > Date: Sun, 16 Nov 2003 11:18:03 -0500 > From: Yasir Malik <ymalik@cs.stevens-tech.edu> > To: pgsql-sql@postgresql.org > Subject: Addition and subtraction on BIT type > > Hello, > Is there a way to do addition and subtraction on BIT types? For example, > for > creat table test (a BIT(3)); > insert into test values (B'101'); > > select a + 1 from test; fails > > and select a::smallint + 1 from test; also fails. > > In addition, is there a way to change the bit of a bit string? For > example change a 1 to a 0 or vice versa. > > Any suggestions? > Thanks, > Yasir >
On Sun, 16 Nov 2003, Yasir Malik wrote: > I think I am almost at a solution to my last question. I can do > select int4(a) from test; > to convert to an integer. So now addition and > subtraction can be done between bit types. But how do I convert back to > BIT type? If I do > select bit(int4(b'1001')); > > I get the following message: > ERROR: parser: parse error at or near "int4" at character 12 > > Can anyone tell me why the bit function is not working? It's under the > pg_catalog schema. It's also the name of a type that takes a precision in parentheses, so you'd have to say "bit"(...) with the quotes. As a note, I think that's going to effectively return you a bit(32), so sszabo=# select "bit"(int4(b'1001')); bit ----------------------------------00000000000000000000000000001001
Thank you for your reply. select int4(b'1001')::bit(32); gives the same result as what you gave. select int4(b'1001')::bit(4); gives the upper four bits, which are all zeroes. How would I get the lower four bits? I building bitmaps using plpgsql, and therefore, I will be doing a lot bit manipulation. Thanks, Yasir On Sun, 16 Nov 2003, Stephan Szabo wrote: > Date: Sun, 16 Nov 2003 21:40:45 -0800 (PST) > From: Stephan Szabo <sszabo@megazone.bigpanda.com> > To: Yasir Malik <ymalik@cs.stevens-tech.edu> > Cc: pgsql-sql@postgresql.org > Subject: Re: [SQL] Addition and subtraction on BIT type > > On Sun, 16 Nov 2003, Yasir Malik wrote: > > > I think I am almost at a solution to my last question. I can do > > select int4(a) from test; > > to convert to an integer. So now addition and > > subtraction can be done between bit types. But how do I convert back to > > BIT type? If I do > > select bit(int4(b'1001')); > > > > I get the following message: > > ERROR: parser: parse error at or near "int4" at character 12 > > > > Can anyone tell me why the bit function is not working? It's under the > > pg_catalog schema. > > It's also the name of a type that takes a precision in parentheses, so > you'd have to say "bit"(...) with the quotes. As a note, I think > that's going to effectively return you a bit(32), so > > sszabo=# select "bit"(int4(b'1001')); > bit > ---------------------------------- > 00000000000000000000000000001001 > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org >
On Mon, 17 Nov 2003, Yasir Malik wrote: > Thank you for your reply. > select int4(b'1001')::bit(32); gives the same result as what you gave. > select int4(b'1001')::bit(4); gives the upper four bits, which are all > zeroes. How would I get the lower four bits? I building bitmaps using > plpgsql, and therefore, I will be doing a lot bit manipulation. I think you need to use substring, probably something like: select substring(9::bit(32) from 29 for 4);
Thank you for your reply. select int4(b'1001')::bit(32); gives the same result as what you gave. select int4(b'1001')::bit(4); gives the upper four bits, which are all zeroes. How would I get the lower four bits? I building bitmaps using plpgsql, and therefore, I will be doing a lot bit manipulation. Thanks, Yasir On Sun, 16 Nov 2003, Stephan Szabo wrote: > Date: Sun, 16 Nov 2003 21:40:45 -0800 (PST) > From: Stephan Szabo <sszabo@megazone.bigpanda.com> > To: Yasir Malik <ymalik@cs.stevens-tech.edu> > Cc: pgsql-sql@postgresql.org > Subject: Re: [SQL] Addition and subtraction on BIT type > > On Sun, 16 Nov 2003, Yasir Malik wrote: > > > I think I am almost at a solution to my last question. I can do > > select int4(a) from test; > > to convert to an integer. So now addition and > > subtraction can be done between bit types. But how do I convert back to > > BIT type? If I do > > select bit(int4(b'1001')); > > > > I get the following message: > > ERROR: parser: parse error at or near "int4" at character 12 > > > > Can anyone tell me why the bit function is not working? It's under the > > pg_catalog schema. > > It's also the name of a type that takes a precision in parentheses, so > you'd have to say "bit"(...) with the quotes. As a note, I think > that's going to effectively return you a bit(32), so > > sszabo=# select "bit"(int4(b'1001')); > bit > ---------------------------------- > 00000000000000000000000000001001 > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org >