Stored procedures Postgres动态设置位大小

Stored procedures Postgres动态设置位大小,stored-procedures,bit,postgresql-9.3,Stored Procedures,Bit,Postgresql 9.3,目标是快速提取N位的比特; 到目前为止,我只找到了这种方法: CREATE OR REPLACE FUNCTION test(x int, size int) RETURNS int AS $BODY$ DECLARE y int; BEGIN y = get_bit(x::bit(size)>>size-1,size-1); return y; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; 但这是因为位(大小

目标是快速提取N位的比特; 到目前为止,我只找到了这种方法:

CREATE OR REPLACE FUNCTION test(x int, size int)
RETURNS int AS
$BODY$
DECLARE
y int;

BEGIN
    y = get_bit(x::bit(size)>>size-1,size-1);


    return y;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
但这是因为位(大小)

整数“size”的输入语法无效

因此,我倾向于将大小写为常量,例如位(3)


有没有办法动态设置位大小?或者,也许还有其他方法可以提取int/text的特定位?

您不需要位字段类型。要测试值的第6位
200

SELECT 200 & (1<<6) != 0
因此,像第一个示例那样,只使用按位操作要简单得多

SELECT get_bit(200::bit(32), 31 - 6);