Re: SELECT a partir de un BITMAP

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>
Cc: Jaime Casanova <jaime(at)2ndquadrant(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:03:10
Message-ID: 20140217160310.GO6342@eldon.alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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(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 Fede Martinez 2014-02-17 16:08:23 Re: SELECT a partir de un BITMAP
Previous Message Jaime Casanova 2014-02-17 15:53:15 Re: SELECT a partir de un BITMAP