当前位置: 首页 > 面试题库 >

PostgreSQL中的Base58编码器功能

赵辉
2023-03-14
问题内容

我在Github
Gist中
找到了针对Base58编码器的MySQL函数

DELIMITER $$

CREATE FUNCTION base58_encode (num int) RETURNS varchar(255)
  DETERMINISTIC

BEGIN
  DECLARE alphabet varchar(255);
  DECLARE base_count int DEFAULT 0;
  DECLARE encoded varchar(255);
  DECLARE divisor DECIMAL(10,4);
  DECLARE mode int DEFAULT 0;

  SET alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
  SET base_count = CHAR_LENGTH(alphabet);
  SET encoded = "";

  WHILE num  >= base_count DO
    SET divisor = num / base_count;
    SET mode = (num - (base_count* TRUNCATE(divisor,0)));
    SET encoded = CONCAT(SUBSTRING(alphabet FROM mode+1 FOR 1), encoded);
    SET num = TRUNCATE(divisor,0);
  END WHILE;

  SET encoded = CONCAT(SUBSTRING(alphabet FROM num+1 FOR 1), encoded);

  RETURN (encoded);

END

我是新手PostgreSQL,很难将上述函数转换为PostgreSQL函数。

PostgreSQL上面的SQL代码片段对Base58 Encoder的等效功能如何?


问题答案:

我想出的PostgreSQL中的等效函数如下。

CREATE FUNCTION base58_encode(num INT)
  RETURNS VARCHAR(255) AS $encoded$

DECLARE
  alphabet   VARCHAR(255);
  base_count INT DEFAULT 0;
  encoded    VARCHAR(255);
  divisor    DECIMAL(10, 4);
  mod        INT DEFAULT 0;

BEGIN
  alphabet := '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
  base_count := char_length(alphabet);
  encoded := '';

  WHILE num >= base_count LOOP
    divisor := num / base_count;
    mod := (num - (base_count * trunc(divisor, 0)));
    encoded := concat(substring(alphabet FROM mod + 1 FOR 1), encoded);
    num := trunc(divisor, 0);
  END LOOP;

  encoded = concat(substring(alphabet FROM num + 1 FOR 1), encoded);

  RETURN (encoded);

END; $encoded$
LANGUAGE PLPGSQL;


 类似资料:
  • 本文向大家介绍vue实现codemirror代码编辑器中的SQL代码格式化功能,包括了vue实现codemirror代码编辑器中的SQL代码格式化功能的使用技巧和注意事项,需要的朋友参考一下 vue实现codemirror代码编辑器中的SQL代码格式化功能 1、首先使用npm安装sql-formatter插件 npm install --save sql-formatter 2、然后引入该sql-

  • 看看文档,它说: https://netty.io/4.0/api/io/netty/channel/ChannelPipeline.html 假设用户在管道中有一个或多个ChannelHandlers来接收I/O事件(例如读取)和请求I/O操作(例如写入和关闭)。例如,一个典型的服务器在每个通道的管道中都有以下处理程序,但是根据协议和业务逻辑的复杂性和特征,这些处理程序可能会有所不同: 协议解码

  • 本文向大家介绍Pycharm编辑器功能之代码折叠效果的实现代码,包括了Pycharm编辑器功能之代码折叠效果的实现代码的使用技巧和注意事项,需要的朋友参考一下   1、主题   在一些情况下,如果某些代码显得不太重要,我们可以通过Pycharm的代码折叠功能将其折叠为一行。在接下来的部分我们将介绍代码折叠功能基本用法。   2、代码可折叠轮廓线以及折叠开关   首先,我们观察一下代码左侧的折叠线。

  • 我们已经在前两节中表征并变换了不定长的输入序列。但在自然语言处理的很多应用中,输入和输出都可以是不定长序列。以机器翻译为例,输入可以是一段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如 英语输入:“They”、“are”、“watching”、“.” 法语输出:“Ils”、“regardent”、“.” 当输入和输出都是不定长序列时,我们可以使用编码器—解码器(encoder-de

  • 回顾之前的定义,encoder 是用来把出站数据从一种格式转换到另外一种格式,因此它实现了 ChannelOutboundHandler。正如你所期望的一样,类似于 decoder,Netty 也提供了一组类来帮助你写 encoder,当然这些类提供的是与 decoder 相反的方法,如下所示: 编码从消息到字节 编码从消息到消息 MessageToByteEncoder 之前我们学习了如何使用

  • 问题内容: Android中是否存在用于String的base-64解码器和编码器? 问题答案: 看到 似乎这是在API版本8或android 2.2中添加的,因此在较旧的平台上将不可用。 但是它的来源是这样,如果需要的话,可以将其原样复制为旧版本。