Có các hàm base-64 (chẳng hạn như encode
) nhưng không có gì đối với cơ số-36. Tuy nhiên, bạn có thể viết một trong số của riêng mình hoặc sử dụng cái này
:
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;
Tuy nhiên, tôi nghĩ bạn nên tự hỏi mình xem cơ sở dữ liệu có phải là nơi thích hợp để xử lý loại định dạng dữ liệu này hay không, các vấn đề trình bày như thế này có thể được xử lý tốt hơn ở gần mức xem cuối cùng của ngăn xếp của bạn.