Re: SELECT a partir de un BITMAP

From: Fede Martinez <federicoemartinez(at)gmail(dot)com>
To: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
Cc: Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>, "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 16:08:23
Message-ID: CAO7JFFW4AF9QTrhwB9oDrGznis+w-qeDh_46H48UB6QKbyzKWQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 <jaime(at)2ndquadrant(dot)com>escribió:

> 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 Jaime Casanova 2014-02-17 16:33:43 Re: SELECT a partir de un BITMAP
Previous Message Alvaro Herrera 2014-02-17 16:03:10 Re: SELECT a partir de un BITMAP