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