2011-02-03 43 views
1

我使用Python的struct.pack函數將各種數據類型打包到PostgreSQL中的常用32位整數字段中。缺點是我無法在數據庫中使用這些值,因此我必須在Python上對數據執行struct.unpack以瞭解其代表的內容。如何在PostgreSQL中將一個整數解壓到float中?

如果我打包一個32位浮點數到這個字段,有什麼辦法讓PostgreSQL爲我做轉換嗎?

我試過,但沒有奏效:

select cast(cast(value as bit(32)) as float4) ... 

它會成功投的整數位(32),但它不會轉換回一個浮動。

回答

1

最簡單的解決方案,我相信你會考慮並放棄一個解決方案,即將32位浮點值存儲在定義爲使用32位浮點數據類型的列中。因爲a)CAST()不知道任何關於C結構,endian-ness或填充字節的內容,以及b)您不能將位數據類型轉換爲一個浮點數據類型。 (儘管如此,您可以將位數據類型轉換爲整數。)

4

您可能沒有在尋找的答案:不要這麼做。

這違反了基本原則:數據庫中的值應該是原子的,不能被其他值整除。所有數據庫的操作(我是否提及全部是)都被調整爲處理單個值。你在這裏「打架」。

即使你能把它拉下來,它也會對性能造成拖累。再加上數據庫不可報告,這不僅僅是你現在有這個問題,每次試圖以任何理由閱讀這些數據都會遇到這個問題。 「那麼,我不想咆哮,'nuf說。

相關問題