no se si es esto lo que pedis: select a from generate_series(1, char_length('0101')) a where substring('0101',a,1)='1' ;
El 17 de febrero de 2014, 12:53, Jaime Casanova <ja...@2ndquadrant.com>escribió: > 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 >