如果元素包含SQL指定的字符串则过滤掉数组元素

问题描述 投票:0回答:1

我有如下所示的示例数据,我想提取仅具有名称及其完整键而不是 dep_names 及其完整键的元素。

我正在尝试如下所示,

WITH dataset AS 
(
   SELECT '{"name": "Bob Smith",
             "org": "engineering",
             "projects": [{"dep_namename":"project1", "completed":false},{"name":"project2", "completed":false},{"name":"project3", "completed":true}]}'
     AS myblob
)
SELECT filter(json_query(myblob, 'lax $.projects[*]' with array wrapper),x -> x like '%name%')  AS project_name
FROM dataset

我期待如下的输出

[{"name":"project2", "completed":false},{
“名称”:“项目3”,“已完成”:true}]

sql arrays amazon-athena presto trino
1个回答
0
投票

尝试直接在查询中使用

exists
过滤器:

SELECT json_query(myblob, 'lax $.projects[*]?(exists(@.name))' with array wrapper) AS project_name
FROM dataset;

输出:

                                 project_name                                 
------------------------------------------------------------------------------
 [{"name":"project2","completed":false},{"name":"project3","completed":true}] 
(1 row)
© www.soinside.com 2019 - 2024. All rights reserved.