PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL :Existe-t-il une fonction qui convertira un int en base 10 en une chaîne en base 36 ?

Il existe des fonctions en base 64 (telles que encode ) mais rien pour la base-36. Mais vous pouvez écrire le vôtre ou utiliser celui-ci :

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;

Je pense que vous devriez vous demander si la base de données est le bon endroit pour traiter ce type de formatage de données, les problèmes de présentation comme celui-ci pourraient être mieux traités plus près du niveau de visualisation final de votre pile.