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