sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL:Er der en funktion, der vil konvertere en base-10 int til en base-36 streng?

Der er base-64-funktioner (såsom encode ) men intet for base-36. Men du kan skrive en af ​​dine egne eller brug denne :

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;

Jeg synes, du skal spørge dig selv, om databasen er det rigtige sted at håndtere denne form for dataformatering, men præsentationsproblemer som dette kan bedre håndteres tættere på det endelige visningsniveau for din stak.



  1. Hvordan formaterer man kun de poster, for hvilke ORA-01843 ikke er smidt?

  2. Sådan gør du ActiveRecord ThreadSafe

  3. Henvisning til et kolonnealias i en WHERE-klausul

  4. Hvordan udelukker man PL/pgSQL-funktioner i eksport?