用于将NUMERIC转换为BYTEA和BYTEA为NUMERIC的SQL函数

时间:2016-05-16 07:10:27

标签: sql postgresql

在PostgreSQL中,如何将NUMERIC值转换为BYTEA值?并BYTEANUMERIC?使用TEXT值,我可以使用CONVERT_TO()CONVERT_FROM()。有什么类似的吗?如果没有,它将如何成为SQL函数代码?

2 个答案:

答案 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