Stored procedures Postgres动态设置位大小
目标是快速提取N位的比特; 到目前为止,我只找到了这种方法: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; 但这是因为位(大小
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);