sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL:Finns det en funktion som konverterar en bas-10 int till en bas-36-sträng?

Det finns bas-64-funktioner (som encode ) men inget för bas-36. Men du kan skriva en egen eller använd den här :

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;

Jag tycker att du bör fråga dig själv om databasen är rätt plats för att hantera den här typen av dataformatering, men presentationsfrågor som detta kan hanteras bättre närmare den slutliga visningsnivån för din stack.



  1. Lägg till saknad månad i resultat med värden från föregående månad

  2. Store accessor problem:Kan inte läsa gamla redan lagrade json objekt serialiserade (hash) värden i mysql databas i Rails 4

  3. Ändra tabellkolumnnamn till versaler i postgres

  4. PHP-MySQL-Hur ökar man säkert MySQL heltalsfält?