sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL:10進数のintを36進数の文字列に変換する関数はありますか?

    base-64関数があります(など) encode )しかし、base-36には何もありません。ただし、独自の1つを作成することも、これを使用する )こともできます。 :

    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;
    

    データベースがこの種のデータフォーマットを処理するのに適切な場所であるかどうかを自問する必要があると思いますが、このような表示の問題は、スタックの最終的な表示レベルに近い方が適切に処理される可能性があります。



    1. OracleのNVL2機能

    2. SQLServerの他の2つの列の間に列を追加する

    3. 複数使用できますか?

    4. コマンドラインを介してLinux上のMySQLユーザーに権限を付与する