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