5
30
과 같은 기본 10 숫자를 u
과 같은 기본 36 표현으로 변환 할 수있는 함수가 PostgreSQL에 있습니까?PostgreSQL : base-10 int를 base-36 string으로 변환하는 함수가 있습니까?
30
과 같은 기본 10 숫자를 u
과 같은 기본 36 표현으로 변환 할 수있는 함수가 PostgreSQL에 있습니까?PostgreSQL : base-10 int를 base-36 string으로 변환하는 함수가 있습니까?
베이스 -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;
이러한 데이터 형식을 처리하기에 적합한 장소이지만, 이와 같은 프리젠 테이션 문제는 스택의 최종 시청 수준에 가깝게 처리하는 것이 좋습니다.
불행히도 링크 된 블로그 게시물이 죽었습니다. 더 긴 숫자에 대해'IN digits bytea '표현을위한 알고리즘을 준비하지 않았습니까? :-) –
@ LukasEder : 당신이 무엇을 요구하는지 모르겠습니다. 데이터베이스 내부에 base-36으로 인코딩하려는 'bytea' 컬럼이 있습니까? –
예, 다소 차이가 있습니다. 나는 그 일을 할 수있는 함수를 다시 작성했다. –