PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL:Gibt es eine Funktion, die einen Base-10-Int in einen Base-36-String umwandelt?

Es gibt Base-64-Funktionen (wie etwa ). encode ) aber nichts für base-36. Aber Sie könnten einen eigenen schreiben oder diesen verwenden :

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;

Ich denke, Sie sollten sich fragen, ob die Datenbank der richtige Ort ist, um mit dieser Art von Datenformatierung umzugehen, aber Präsentationsprobleme wie diese sollten besser näher an der endgültigen Anzeigeebene Ihres Stacks behandelt werden.