Ruben Fitó escribió:
> 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

Me parece una manera poco feliz de codificar esta información, pero en
este caso podrías intentar sacar el bit correspondiente a cada número entero
usando algo como lo siguiente:

with bitmap as (select '10010010111000100'::varbit(17) as el_valor)
select i + 1, ((el_valor << i) & '10000000000000000')::varbit(1)
from  bitmap, generate_series(0, length(el_valor) - 1) i;

 ?column? | varbit 
----------+--------
        1 | 1
        2 | 0
        3 | 0
        4 | 1
        5 | 0
        6 | 0
        7 | 1
        8 | 0
        9 | 1
       10 | 1
       11 | 1
       12 | 0
       13 | 0
       14 | 0
       15 | 1
       16 | 0
       17 | 0
(17 filas)


Lamentablemente no creo que esto funcione limpiamente en < 9.3 por falta
de LATERAL (el cual no se ve en la consulta, pero está implícito en el
hecho de usar el_valor como argumento de generate_series() que sólo
existe por el "from bitmap".   Pero a lo mejor podrías imitarlo usando
más cláusulas WITH.

O quizás hay formas aún más simples.

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

-
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