sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:Is er een functie die een base-10 int converteert naar een base-36 string?

Er zijn base-64-functies (zoals encode ) maar niets voor base-36. Maar je zou er zelf een kunnen schrijven of gebruik deze :

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;

Ik denk dat je jezelf moet afvragen of de database de juiste plaats is om met dit soort gegevensopmaak om te gaan, maar presentatieproblemen zoals deze kunnen beter worden aangepakt dichter bij het uiteindelijke weergaveniveau van je stapel.



  1. SQL WHERE-kolom =alles

  2. SQL Server-tekst Gegevenstype Maxlength =65.535?

  3. converteer datumstring naar mysql datetime-veld

  4. Een Excel-blad uploaden en de gegevens importeren in de SQL Server-database