6

bigintHTMLで使用される16進文字列をaに変換し、PL / pgSQLで記述された関数を介して、Postgresで個別のR、G、およびB値に変換したいと思います。

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」などを渡して、2つを組み合わせることができません。

誰かもっと良いアイデアがありますか?PosgreSQL 9.1を使用していますか?

4

1 に答える 1

23

簡単な方法は次のとおりです。

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

左端のビットは常に符号ビットとして解釈されるため、0の左パディングが必要です。また、署名されていることにも注意してbigintください。postgresには署名されていない型が組み込まれていません。

于 2012-09-11T19:48:06.583 に答える