2017-02-11 76 views
0

我試圖從存儲爲bytea的Postgres數據庫中獲取一個值。
這些值是VLAN ID(在1-4096之間的整數)。將具有多個八進制數的bytea轉換爲整數

但是,它存儲在數據庫中(作爲一個例子)爲:

\000\000\001\221 (equal to 401) 

我希望有我的SQL查詢的整數值,如果可能的話回到我的Python代碼。

經過一番搜索,我可以使用get_byte得到那些4八進制的一個(通過指定位置):

select get_byte(sub.datavlan_bytes,3) AS vlan -> this gives me the value of /221 (145) 

但是,我不能讓整個價值。

是否有一種很好的方法來獲取選擇查詢中的數據,或者是否需要在我的腳本中發生?

回答

2

普通SQL通過鑄造:

select ('x' || encode(o, 'hex'))::bit(32)::int 
from (values ('\000\000\001\221'::bytea)) s (o) 
; 
int4 
------ 
    401 
+0

是,PLPGSQL不必要的,只投。 – klin

+0

這很好 - 謝謝! –

0

Postgres 9+爲bytea值提供hex格式。如果您可以將bytea_output連接設置設置爲hex(這是默認設置,因此它可能已經是...),您可以獲取可以輸入到Python的int(..., 16)函數的字符串。那會直接讓你的401。

編輯: Postgres的文檔:https://www.postgresql.org/docs/9.0/static/datatype-binary.html

相關問題