2011-05-13 4 views

답변

9

베이스 -64 기능 (예 : encode)이 있지만베이스 -36의 경우는 없습니다. 그러나 당신은 당신의 자신의 하나 use this one를 작성할 수 (주이 링크가 죽었다는 것을는 단지 내가 가지고있는 속성이기 때문에, 나는 그것을에서 떠날거야) : 나는 당신이 데이터베이스가있는 경우 자신에게 물어해야한다고 생각

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; 

이러한 데이터 형식을 처리하기에 적합한 장소이지만, 이와 같은 프리젠 테이션 문제는 스택의 최종 시청 수준에 가깝게 처리하는 것이 좋습니다.

+0

불행히도 링크 된 블로그 게시물이 죽었습니다. 더 긴 숫자에 대해'IN digits bytea '표현을위한 알고리즘을 준비하지 않았습니까? :-) –

+0

@ LukasEder : 당신이 무엇을 요구하는지 모르겠습니다. 데이터베이스 내부에 base-36으로 인코딩하려는 'bytea' 컬럼이 있습니까? –

+0

예, 다소 차이가 있습니다. 나는 그 일을 할 수있는 함수를 다시 작성했다. –

관련 문제