Thread: operators and bit field

operators and bit field

From
Dennis Gearon
Date:
I haven't seen what operators can be applied to bit masks.

In particular, I am looking to use binary AND:

I want to AND two bitmasks together and see:

    A/ if the result has ANY bits set
    B/ what bits are set in the results.

SELECT other_fields
FROM some_table
WHERE
      ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternONE
   OR ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternTWO
;

I may try to use a single char for one of the bit masks I need,
is it possible to store all 256 values into a varchar(1) using
escaped input?

Is it possible to AND two varchars within a select and compare the result?

SELECT other_fields
FROM some_table
WHERE ( varchar_1_columnA & varchar_1_columnB ) = 'single_escaped_char_string';



Re: operators and bit field

From
Bruno Wolff III
Date:
On Fri, Feb 14, 2003 at 11:12:15 -0800,
  Dennis Gearon <gearond@cvc.net> wrote:
> I haven't seen what operators can be applied to bit masks.

It looks like & works:
area=> select 3&6;
 ?column?
----------
        2
(1 row)

>
> In particular, I am looking to use binary AND:
>
> I want to AND two bitmasks together and see:
>
>     A/ if the result has ANY bits set
>     B/ what bits are set in the results.
>
> SELECT other_fields
> FROM some_table
> WHERE
>       ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternONE
>    OR ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternTWO
> ;
>
> I may try to use a single char for one of the bit masks I need,
> is it possible to store all 256 values into a varchar(1) using
> escaped input?
>
> Is it possible to AND two varchars within a select and compare the result?
>
> SELECT other_fields
> FROM some_table
> WHERE ( varchar_1_columnA & varchar_1_columnB ) = 'single_escaped_char_string';
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org

Re: operators and bit field

From
Dennis Gearon
Date:
Bruno, could you check that with explicity bitfield(n) values, please?


2/14/2003 1:37:03 PM, Bruno Wolff III <bruno@wolff.to> wrote:

>On Fri, Feb 14, 2003 at 11:12:15 -0800,
>  Dennis Gearon <gearond@cvc.net> wrote:
>> I haven't seen what operators can be applied to bit masks.
>
>It looks like & works:
>area=> select 3&6;
> ?column?
>----------
>        2
>(1 row)
>
>>
>> In particular, I am looking to use binary AND:
>>
>> I want to AND two bitmasks together and see:
>>
>>     A/ if the result has ANY bits set
>>     B/ what bits are set in the results.
>>
>> SELECT other_fields
>> FROM some_table
>> WHERE
>>       ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternONE
>>    OR ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternTWO
>> ;
>>
>> I may try to use a single char for one of the bit masks I need,
>> is it possible to store all 256 values into a varchar(1) using
>> escaped input?
>>
>> Is it possible to AND two varchars within a select and compare the result?
>>
>> SELECT other_fields
>> FROM some_table
>> WHERE ( varchar_1_columnA & varchar_1_columnB ) = 'single_escaped_char_string';
>>
>>
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 6: Have you searched our list archives?
>>
>> http://archives.postgresql.org
>




Re: operators and bit field

From
Dennis Gearon
Date:
Also, for fun, could you try '3' & '6' ?

2/14/2003 1:37:03 PM, Bruno Wolff III <bruno@wolff.to> wrote:

>On Fri, Feb 14, 2003 at 11:12:15 -0800,
>  Dennis Gearon <gearond@cvc.net> wrote:
>> I haven't seen what operators can be applied to bit masks.
>
>It looks like & works:
>area=> select 3&6;
> ?column?
>----------
>        2
>(1 row)
>
>>
>> In particular, I am looking to use binary AND:
>>
>> I want to AND two bitmasks together and see:
>>
>>     A/ if the result has ANY bits set
>>     B/ what bits are set in the results.
>>
>> SELECT other_fields
>> FROM some_table
>> WHERE
>>       ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternONE
>>    OR ( bitmask_8_columnA & bitmask_8_column B) = bitmask_8_patternTWO
>> ;
>>
>> I may try to use a single char for one of the bit masks I need,
>> is it possible to store all 256 values into a varchar(1) using
>> escaped input?
>>
>> Is it possible to AND two varchars within a select and compare the result?
>>
>> SELECT other_fields
>> FROM some_table
>> WHERE ( varchar_1_columnA & varchar_1_columnB ) = 'single_escaped_char_string';
>>
>>
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 6: Have you searched our list archives?
>>
>> http://archives.postgresql.org
>




Re: operators and bit field

From
Tom Lane
Date:
Dennis Gearon <gearond@cvc.net> writes:
> I haven't seen what operators can be applied to bit masks.
> In particular, I am looking to use binary AND:
> I want to AND two bitmasks together and see:
>     A/ if the result has ANY bits set
>     B/ what bits are set in the results.

Why don't you use bit strings, like the SQL spec authors intended?

regression=# select b'10001' & b'01111';
 ?column?
----------
 00001
(1 row)

See types BIT(n) and BIT VARYING(n).

            regards, tom lane

Re: operators and bit field

From
Dennis Gearon
Date:
Sorry,

    'bit masks' === 'bit strings'

BTW, how are 'bit strings' stored and manipulated?

2/14/2003 2:29:48 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

>Dennis Gearon <gearond@cvc.net> writes:
>> I haven't seen what operators can be applied to bit masks.
>> In particular, I am looking to use binary AND:
>> I want to AND two bitmasks together and see:
>>     A/ if the result has ANY bits set
>>     B/ what bits are set in the results.
>
>Why don't you use bit strings, like the SQL spec authors intended?
>
>regression=# select b'10001' & b'01111';
> ?column?
>----------
> 00001
>(1 row)
>
>See types BIT(n) and BIT VARYING(n).
>
>            regards, tom lane
>