我有一个postquist形式的表,其中有一个包含真实[]条目的列.

enter image description here

我需要将这些值输出为如下文本:

      CASE WHEN z > 16 THEN '{"cityJson" :' ||  cityjsonfeature::TEXT || ', "metadata" : {' || '"translate:"'||'{' ||   m.translate  ||'},'|| '"scale:"'||'{' ||   m.scale  ||'}' '}' ELSE NULL END AS cityjson,

这里的问题是,我没有得到完整的值,而是它看起来像这样:

{98.016,1.3326125e + 06,6.7176775e + 06}

有没有方法可以在不使用e+06的情况下获取值,而是作为完整的浮动值?比如1332612.5?

非常感谢帮助!

推荐答案

您可以投出real[]float[]:

CASE WHEN z > 16 THEN concat('{"cityJson" :', cityjsonfeature::TEXT,
                             ', "metadata" : {', 
                             '"translate:"','{', m.translate::float[]::text,'},',
                             '"scale:"','{', m.scale ,'}')
                 ELSE NULL 
END AS cityjson,

这正是它要做的:demo

select ('{98.016,1.3326125e+06,6.7176775e+06}'::real[])::float[];
float8
{98.01599884033203,1332612.5,6717677.5}

请注意,该数组的文本表示不会遵循SON数组语法.{个是用于杨森对象,而不是array.您还可以将它们添加到文本表示附带的花括号顶部,这进一步打破了问题.出于同样的原因,您的scale最终也会畸形.

您还将逗号放入键名称"translate:""scale:"中,而不是放在它们"translate":"scale":之后.您可以通过使用json_build_object()函数而不是手动构建来避免此类手动错误.它还会为您将您的PostgreSQL数组重新格式化为有效的SONarray.如果您需要为人类可读性而格式化输出,您还可以使用jsonb版本访问jsonb_pretty():demo

SELECT
CASE WHEN z > 16 
     THEN jsonb_pretty(
             jsonb_build_object( 
                 'cityJson',cityjsonfeature
                ,'metadata',jsonb_build_object( 
                                'translate',m.translate
                               ,'scale',m.scale )
              )
          )
     ELSE NULL 
END AS cityjson
FROM test AS m;

请注意,它还自动处理删除花括号以及real[]类型值中的指数符号,因此您不再需要::float[]了.

cityjson
{
    "cityJson": {
        "somekey": "someVal"
    },
    "metadata": {
        "scale": [
            98.016,
            1332612.5,
            6717677.5
        ],
        "translate": [
            98.01599884033203,
            1332612.5,
            6717677.5
        ]
    }
}

有时为了冗长而添加ELSE NULL,但这是默认行为,因此可以省略.

Postgresql相关问答推荐

如何删除Devtainer之前创建的PostgreSQL数据库?

在PostGreSQL中获取最近日期的项目

如何获得一起满足数量要求的物品? (WHILE 循环还是 CTE?)postgresql

我应该如何更新热门表?

Gorm 创建表单数据文件上传错误

返回行值和行计数的总和

无法使用golang在postgresql中使用自定义类型插入/更新数据

PostgreSQL unnest 与空数组

如何通过我在 PostgreSQL 中的数据库获取列大小和类型

查询仅属于特定部门的用户

如何使用字符串作为 PostgreSQL 咨询锁的键?

为什么 sqlalchemy 的默认列值不起作用

如何在 postgres 模式中列出关系

PostgreSQL 中的行编号

PostgreSQL:如何在用户级别设置 search_path?

PG::ConnectionBad FATAL:role "Myname" does not exist

如何使 array_agg() 像 mySQL 中的 group_concat() 一样工作

调用 getNextException 来查看原因:如何让 Hibernate / JPA 显示异常的数据库服务器消息

pgadmin 错误:no password supplied

Django 中的唯一模型字段和区分大小写(postgres)