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