Re: cast bit to boolean?

Joel Burton <jburton@scw.org>

From: Joel Burton <jburton@scw.org>
To: Vivek Khera <khera@kcilink.com>
Cc: pgsql-general@postgresql.org
Date: 2001-05-03T21:42:30Z
Lists: pgsql-general
On Thu, 3 May 2001, Vivek Khera wrote:

> How might one case a BIT to a BOOLEAN?  For example, I want to return
> rows which have non-zero bit representation for, say, (sel_a & b'0011').
> That is, rows with the first or second bit set.
> 
> I tried an explicit CAST, and just the query directly, but the cast
> say you cant cast type 'bit' to 'bool', and the direct query says
> WHERE clause must return type bool, not type bit:
> 
> create table t1 (sel_a BIT(6),sel_b BIT(6));
> insert into t1 values (b'000001',b'001000');
> select * from t1 where sel_a & b'100001';
> ERROR:  WHERE clause must return type bool, not type bit
> 
> Where might I look for this?  The manual is quite sparse regarding BIT
> types.

There might be a better way, but you can write a conversion routine:

create function bool(bit) returns bool as '
begin 
  if $1 = ''1''::bit
  then
    return true; 
  end if; 
  return false; 
end;' 
language 'plpgsql' with (isacachable);

should do the trick, albeit more slowly than a built-in or C function.

-- 
Joel Burton   <jburton@scw.org>
Director of Information Systems, Support Center of Washington