2012-09-11 107 views
4

我想將HTML所用的十六進制字符串轉換爲bigint,然後通過PL/pgSQL中寫入的函數將其轉換爲Postgres中的單獨R,G和B值。在Postgres中將十六進制字符串轉換爲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

一個簡單的方法是:

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

左填充0是必要的,因爲最左邊的位總是要被解釋爲符號位。 也請記住bigint已簽名,postgres沒有內置的無符號類型。

+0

謝謝丹尼爾。如何做bigint到十六進制? – Cherven

+2

@Cherven:postgres有一個內建的'to_hex(bigint)'函數 –

相關問題