在PostgreSQL中,如何将NUMERIC值转换为BYTEA值?和BYTEA到NUMERIC吗?通过使用TEXT值,我可以使用CONVERT_TO()和CONVERT_FROM()。有没有类似的东西?如果不是,SQL函数代码是怎么回事?
发布于 2019-08-30 21:41:43
下面是使用PG 11测试的函数。请注意,numeric2bytea只处理非负数。
CREATE OR REPLACE FUNCTION bytea2numeric(_b BYTEA) RETURNS NUMERIC AS $$
DECLARE
_n NUMERIC := 0;
BEGIN
FOR _i IN 0 .. LENGTH(_b)-1 LOOP
_n := _n*256+GET_BYTE(_b,_i);
END LOOP;
RETURN _n;
END;
$$ LANGUAGE PLPGSQL IMMUTABLE STRICT;
CREATE OR REPLACE FUNCTION numeric2bytea(_n NUMERIC) RETURNS BYTEA AS $$
DECLARE
_b BYTEA := '\x';
_v INTEGER;
BEGIN
WHILE _n > 0 LOOP
_v := _n % 256;
_b := SET_BYTE(('\x00' || _b),0,_v);
_n := (_n-_v)/256;
END LOOP;
RETURN _b;
END;
$$ LANGUAGE PLPGSQL IMMUTABLE STRICT;示例:
=> select bytea2numeric('\xdeadbeef00decafbad00cafebabe');
bytea2numeric
------------------------------------
4516460495214885311638200605653694
(1 row)
=> select numeric2bytea(4516460495214885311638200605653694);
numeric2bytea
--------------------------------
\xdeadbeef00decafbad00cafebabe
(1 row)发布于 2016-05-16 16:20:14
我认为VARBINARY用于在sql中存储bytea。以便使用流动脚本将数字转换为字节
select CONVERT(VARBINARY,10)and答案将为0x0000000A,VARBINARY为numeric
select CONVERT(int,0x0000000A)答案将是10
https://stackoverflow.com/questions/37248518
复制相似问题