【发布时间】:2021-02-19 19:47:46
【问题描述】:
我的 Postgres 数据库中有一个 JSONB 列。在某些情况下,它包含编码为字符串*的数字,例如: "123" 或 "3.232" 或 "2.32e14"。引号是存储的 JSONB 值的一部分,它是 "123" 而不是 123。
我想总结这些值,因此需要一种方法将它们视为浮点数。我在 PSQL 中找不到任何方法来执行此操作。
select column::float 失败,因为它们是 JSON 字符串,而不是 DB 文本类型。 column::text::float 也不起作用。
select to_number(column::text, '999.999') 不起作用,因为to_number 需要固定格式的数字,而我找不到解析标准格式浮点数的方法。
如何将 JSONB 字符串编码的值转换为数字值以进行计算?
*背景:它们被存储为字符串,因为存储需要精确,并且不能在往返浮点数的往返过程中存活。对于计算,可以将精度降低到浮点数。他们可以在往返于高级十进制格式的过程中幸存下来,但这是 Python 库 SQLAlchemy 与 JSON 的限制,它阻止了它的工作。即使我们在这里找到了解决方案,我仍然需要迁移现有数据,因此问题存在。
【问题讨论】:
标签: postgresql