5
PostgreSQL中是否有一个函数可以将基数为10的数字(如30
)转换为像u
这样的基数36表示?PostgreSQL:有没有函数可以将base-10 int转换为base-36字符串?
PostgreSQL中是否有一个函数可以将基数为10的数字(如30
)转换为像u
这样的基数36表示?PostgreSQL:有没有函数可以将base-10 int转换为base-36字符串?
有64个基本功能(如encode
),但基本-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;
我想你应该问自己,如果数据库是处理这种数据格式的正确地方,但是像这样的表现问题可能会更好地处理到接近堆栈的最终查看级别。
不幸的是,链接的博客已经死亡。你不会有这样一个算法,准备用一个更长的数字来表示一个'IN digits digitsa'表示吗? :-) – 2013-10-02 15:09:48
@LukasEder:我不确定你在问什么。你有一个'bytea'列,你想在数据库中编码为base-36? – 2013-10-02 16:55:12
是的,或多或少。我已经重写了这个功能,同时...... – 2013-10-02 19:01:32