【问题标题】:SQL query to read nested JSON object读取嵌套 JSON 对象的 SQL 查询
【发布时间】:2022-11-21 00:25:50
【问题描述】:

如何读取匹配查询参数的 JSON 对象?我想过滤仅包含元数据列中的查询参数的视频 url 数据,并通过删除查询参数来替换它。

metadata
{"video-url":"xyz.com/video/xy4jnj?pubtool=oembed","provider":"some-video","video-id":"x8cse6q"}
{"video-url":"xyz.com/video/x8cse6q?pubtool=oembed","provider":"some-video","video-id":x8cse6q}
{"video-url":"xyz.com/video/x8cse6q","provider":"some-video","video-id":"x8cse6q"}
select * from content where metadata.video-url ilike %?pubtool%

预期返回由字段视频 url 的元数据列中的查询参数组成的行。

【问题讨论】:

标签: mysql sql postgresql


【解决方案1】:

您首先需要从 json 中提取 vidourl 并将其与您的搜索模式进行比较。

您需要将结果转换为 varchar 才能使用

SELECT
"metadata"
FROM video 
WHERE ("metadata"  #> '{"video-url"}')::varchar like '%?pubtool%'
metadata
{"video-url":"xyz.com/video/xy4jnj?pubtool=oembed","provider":"some-video","video-id":"x8cse6q"}
{"video-url":"xyz.com/video/x8cse6q?pubtool=oembed","provider":"some-video","video-id":"x8cse6q"}
SELECT 2

fiddle

【讨论】:

    【解决方案2】:

    从元数据中提取 video-url

    SELECT
      metadata->>'video-url' as "video-url"
    FROM m;
    

    见:DBFIDDLE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多