首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于将NUMERIC转换为BYTEA和BYTEA转换为NUMERIC的SQL函数

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

Stack Overflow用户
提问于 2016-05-16 15:10:27
回答 2查看 3.1K关注 0票数 1

在PostgreSQL中,如何将NUMERIC值转换为BYTEA值?和BYTEANUMERIC吗?通过使用TEXT值,我可以使用CONVERT_TO()CONVERT_FROM()。有没有类似的东西?如果不是,SQL函数代码是怎么回事?

EN

回答 2

Stack Overflow用户

发布于 2019-08-30 21:41:43

下面是使用PG 11测试的函数。请注意,numeric2bytea只处理非负数。

代码语言:javascript
复制
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;

示例:

代码语言:javascript
复制
=> select bytea2numeric('\xdeadbeef00decafbad00cafebabe');
           bytea2numeric            
------------------------------------
 4516460495214885311638200605653694
(1 row)

=> select numeric2bytea(4516460495214885311638200605653694);
         numeric2bytea          
--------------------------------
 \xdeadbeef00decafbad00cafebabe
(1 row)
票数 5
EN

Stack Overflow用户

发布于 2016-05-16 16:20:14

我认为VARBINARY用于在sql中存储bytea。以便使用流动脚本将数字转换为字节

代码语言:javascript
复制
select CONVERT(VARBINARY,10)

and答案将为0x0000000A,VARBINARY为numeric

代码语言:javascript
复制
select CONVERT(int,0x0000000A)

答案将是10

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37248518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档