如何在PostgreSQL中将整数解包成浮点数?

时间:2011-02-03 20:55:59

标签: python sql postgresql pack

我正在使用Python的struct.pack函数将各种数据类型打包到PostgreSQL中的常见32位整数字段中。缺点是我不能在数据库中使用这些值,我必须在Python上对数据执行struct.unpack以了解它代表什么。

如果我将32位浮点数打包到此字段中,有没有办法让PostgreSQL为我进行转换?

我尝试了这个,但它不起作用:

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

它会成功地将整数转换为位(32),但不会将其转换回浮点数。

2 个答案:

答案 0 :(得分:4)

你可能不想要的答案:不要那样做。

这违反了基础知识:数据库中的值应该是原子的,不能分成其他值。所有数据库的操作(我提到所有)都被调整为处理单个值。你在这里“打架”。

即使你可以将它拉下来,也会拖累性能。此外,数据库不可报告,不仅仅是您现在遇到此问题,因任何原因读取此数据的每次尝试都会遇到此问题。

“好吧,我不想咆哮,”努夫说。

答案 1 :(得分:1)

最简单的解决方案,也是我确定您已经考虑和放弃的解决方案,是将32位浮点值存储在定义为使用32位浮点数据类型的列中。

CAST()不适合你,因为a)CAST()对C结构,字节序或填充字节一无所知,b)你不能将位数据类型转换为a浮点数据类型。 (不过,您可以将位数据类型转换为整数。)