Re: bit operations
От | will trillich |
---|---|
Тема | Re: bit operations |
Дата | |
Msg-id | 20010717155020.B9630@serensoft.com обсуждение исходный текст |
Ответ на | Re: bit operations ("Richard Huxton" <dev@archonet.com>) |
Список | pgsql-general |
On Wed, Jul 04, 2001 at 02:56:06PM +0100, Richard Huxton wrote: > From: "Johan Björk" <johan@websidorna.com> > > > Have a little problem with bit operaitions that I cannot find the answer > to on the Internet. Have been searching through the archives but no result. > > > > In MySQL you can have a INT column and do bit logic ala C-style like this: > > "select * from table where flags & 4;" > > If you're using an int for "flags": > > select * from table where (flags & 4) > 0; > > The bitwise AND returns an integer rather than a boolean, and AFAIK SQL > doesn't follow C's rules on this. > > > Can I do something similar with std SQL? I've been trying to cast > everything to BIT but without success, and I've also been creating a "flags > bit(4)", setting a row to "1000" (8) and trying to compare, but I have > absolutely no idea how to. > > > > Say I wanna check if 8 (1xxx) and 2 (xx1x) is set, how do I do that?! > > To check two values just do: > > SELECT * FROM table WHERE (flags & val1 & val2) > 0; i don't think so. val1 := 8 := 01000 val2 := 2 := 00010 val1 & val2 00000 zero probably you meant (flags & val1) > 0 and (flags & val2) > 0 or flags & (val1 + val2) > 0 > If you want to use BIT types you'll need something like: > > SELECT * FROM table WHERE (flags & '0010100'::BIT) <> '0'::BIT; > > and updates like > > UPDATE table SET flags = flags | '0001000'::BIT; > > Note the need to have the same string-length when using AND/OR. cool. thanks. -- I'd concentrate on "living in the now" because it is fun and on building a better world because it is possible. - Tod Steward will@serensoft.com http://sourceforge.net/projects/newbiedoc -- we need your brain! http://www.dontUthink.com/ -- your brain needs us!
В списке pgsql-general по дате отправления: