Re: SELECT a partir de un BITMAP

From: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
To: Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: SELECT a partir de un BITMAP
Date: 2014-02-17 15:53:15
Message-ID: CAJKUy5iDDoeByXLudzfgRdsz-zrg9EoYRrR0Q=pzA_5hMMinNw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2014-02-17 10:05 GMT-05:00 Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>:
>
> Hola Jaime,
>
> concretamente necesito que a partir de un bitmap por ejemplo '101110..n', este bitmap se traduce a :
>
> 1 --> Codigo_producto_externo = 1 NO autorizado
> 0 --> Codigo_producto_externo = 2 autorizado
> 1 --> Codigo_producto_externo = 3 NO autorizado
> 1 --> Codigo_producto_externo = 4 NO autorizado
> 1 --> Codigo_producto_externo = 4 NO autorizado
> 0 --> Codigo_producto_externo = 5 autorizado
> .
> .
> n--> Codigo_producto_externo = posicion de n
>
> Como se puede observar la posición de cada uno de los bits del bitmap corresponde a un codigo de producto externo.
>
> Simplemente me gustaria saber si existe alguna manera para poder hacer una consulta de productos autorizados utilizando este bitmap.
>
>
> En resumen y como ejemplo:
>
> Tengo 4 productos en una tabla, codificacos como 1, 2, 3, 4.
> Tengo un bitmap de productos autorizados por cliente = 1 0 1 0.
> Entonces el resultado esperado es que los productos autorizados son los códigos 2 i 3. --> ya que 1=bloqueado, 0=autorizado
>
>

Saludos,

Puedes usar una función como esta o al menos el SELECT que esta
dentro, claro en lugar de WITH RECURSIVE tambien se podia haber usado
un for para recorrer el bitmap (que quiza sea mas eficiente)

create or replace function productos_activos(bitmap text) returns
setof integer as
$$
with recursive q(pos) as (
select position('0' in bitmap)
union all
select position('0' in substring(bitmap from pos+1)) + pos
from q
where position('0' in substring(bitmap from pos+1)) > 0
)
select * from q;
$$ language sql;

--
Jaime Casanova www.2ndQuadrant.com
Professional PostgreSQL: Soporte 24x7 y capacitación
Phone: +593 4 5107566 Cell: +593 987171157

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2014-02-17 16:03:10 Re: SELECT a partir de un BITMAP
Previous Message Alvaro Herrera 2014-02-17 15:45:42 Re: problema con constraint no permite grabar