我有如下示例数据,我希望显示所有项目名称,而不是只通过传递索引来显示一个项目名称,因为并不是每列都知道数组的大小.

通过在下面的SQL中try ,只能得到‘project1’.需要在串联中同时使用项目1和项目2.

WITH dataset AS 
(
   SELECT '{"name": "Bob Smith",
             "org": "engineering",
             "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}'
     AS myblob
)
SELECT json_extract_scalar(myblob, '$.projects[0].name') AS project_name
FROM dataset

应与串联中的项目1和项目2相同.

project_name
project1,project2

推荐答案

有多种 Select .例如,您可以使用json_query,它比json_extract具有更好的JSON路径支持:

SELECT json_query(myblob, 'lax $.projects[*].name' WITH  ARRAY WRAPPER) projects
FROM dataset;

输出:

        projects
-------------------------
 ["project1","project2"]

Sql相关问答推荐

为表中每个缺少的引用创建新行

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

获得第三名或最老的记录

数组列的postgres更新查询

无法将发票与产品价格相关联

如何在AWS Athena中 Select JSON数组的最后一个元素?

SQL仅返回第一个字母在A-Z之间的值

将SQL Server查询改进为;线程安全;

按行值出现的顺序对行值进行分组

如何根据共同列值从两个表中包含列,但只包含左表中的行

多行状态下的分组查询判断状态

基于字符串的SQL查询

如何显示最常引用条目的详细信息

获取 SQL Server 中每一行的两个-之间的文本

为数组中的每个元素从表中收集最大整数

Postgres 条件求和函数

PostgresQL-根据另一列找到 3 个最低值

如何跨行合并以删除 SQL 中的空值?

删除具有相同 ID 的重复记录 - Postgresql

如何优化sql请求?