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
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 |