no se si es esto lo que pedis:

select a from generate_series(1, char_length('0101')) a where
substring('0101',a,1)='1' ;


El 17 de febrero de 2014, 12:53, Jaime Casanova <ja...@2ndquadrant.com>escribió:

> 2014-02-17 10:05 GMT-05:00 Ruben Fitó <r.f...@ubiquat.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@postgresql.org
> )
> Para cambiar tu suscripción:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>

Responder a