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/