2012-09-11 7 views
4

HTML에 사용 된 16 진수 문자열을 bigint으로 변환하고 PL/pgSQL로 작성된 함수를 통해 Postgres의 R, G 및 B 값으로 변환하고 싶습니다.Postgres에서 16 진수 문자열을 bigint로 변환

이 같은 bytea로 문자열을 디코딩 할 수

:

hex bytea := decode(hex, 'hex'); 

그리고이 아름다움처럼 작동 고정 값으로 쿼리에서이 :

select (array[ (cast(x'ffaa33' as bigint) >> 16) % 256, 
       (cast(x'ffaa33' as bigint) >> 8) % 256, 
       cast(x'ffaa33' as bigint) % 256 ]) 

하지만 함께 두 가지를 넣을 수 없습니다 , 통과 - 예 : 'ffaa33'을 매개 변수로 사용합니다.

누구나 더 좋은 아이디어가 있습니까? PosgreSQL 9.1을 사용하고 있습니까?

답변

12

쉬운 방법은 다음과 같습니다 가장 왼쪽 비트는 항상 부호 비트로 해석 될 것입니다 때문에 0

select ('x'||lpad(the_hex_value,16,'0'))::bit(64)::bigint; 

왼쪽 패딩이 필요하다. bigint이 서명됨에도 불구하고, postgres에는 서명되지 않은 형식이 내장되어 있지 않습니다.

+0

다니엘에게 감사드립니다. bigint를 16 진수로 변환하는 방법? – Cherven

+2

@Cherven : postgres에는 내장 to_hex (bigint) 함수가 있습니다. –

관련 문제