PostgreSQL:是否有将 base-10 int 转换为 base-36 字符串的函数?

标签 postgresql

PostgreSQL 中是否有函数可以将像 30 这样的 10 进制数转换成像 u 这样的 36 进制数?

最佳答案

有 base-64 函数(例如 encode )但没有 base-36 函数。但是你可以自己写一个或use this one :

CREATE OR REPLACE FUNCTION base36_encode(IN digits bigint, IN min_width int = 0) RETURNS varchar AS $$
DECLARE
    chars char[]; 
    ret varchar; 
    val bigint; 
BEGIN
    chars := ARRAY['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
    val := digits; 
    ret := ''; 
    IF val < 0 THEN 
        val := val * -1; 
    END IF; 
    WHILE val != 0 LOOP 
        ret := chars[(val % 36)+1] || ret; 
        val := val / 36; 
    END LOOP;

    IF min_width > 0 AND char_length(ret) < min_width THEN 
        ret := lpad(ret, min_width, '0'); 
    END IF;

    RETURN ret;
END;
$$ LANGUAGE plpgsql IMMUTABLE;

我认为您应该问问自己,数据库是否是处理此类数据格式的正确位置,但是,像这样的表示性问题可能在堆栈的最终查看级别附近得到更好的处理。

关于PostgreSQL:是否有将 base-10 int 转换为 base-36 字符串的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5997241/

相关文章:

SQL:如何选择组中同一行的两个字段?

mysql - 如何用年份和日期排序 SQL 结果?

ruby-on-rails-3 - 使用 PostgreSQL 数据库更新 Datamapper 中的多对多关联

c# - Npgsql 参数化查询输出与 PostGIS 不兼容

sql - 如果我在 LIKE 之前的字符串中放置通配符,而不是在 LIKE 之后的字符串中放置通配符,为什么会得到不同的结果

postgresql - Postgres 如何将空间和非空间数据合并到一个索引中

postgresql - 如何使用 Mrjob 和 Hadoop 填充 postgresql 数据库

node.js - 处理 Postgres 错误消息以执行正确的查询

java - 连接 Amazon RDS 上的顶级 PostgreSQL 9.3.1 时 Hibernate/JDBC 挂起

json - 如何迭代 PostgreSQL jsonb 数组值以在查询中进行匹配