在PostgreSQL中,如何将NUMERIC
值转换为BYTEA
值?并BYTEA
到NUMERIC
?使用TEXT
值,我可以使用CONVERT_TO()
和CONVERT_FROM()
。有什么类似的吗?如果没有,它将如何成为SQL函数代码?
答案 0 :(得分:1)
这里是使用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)
答案 1 :(得分:-2)
我认为VARBINARY用于在sql中存储bytea。 所以转换为数字到字节使用流动的脚本
select CONVERT(VARBINARY,10)
并回答为0x0000000A 和VARBINARY到数字
select CONVERT(int,0x0000000A)
并且答案将是10