【问题标题】:json object query in postgresqlpostgresql中的json对象查询
【发布时间】:2021-10-14 17:59:55
【问题描述】:

我正在处理包含 JSON 数据的行。专栏是这样的,

log 
[{{"status":"orderderd","date":"2021-10-13T16:30:57.134Z"},{"status":"deivered","date":"2021-10-13T16:30:57.134Z"}}]

现在我想获取状态传递的时间。我该如何为此编写查询?

【问题讨论】:

标签: sql postgresql


【解决方案1】:

如果您使用的是 Postgres 12 或更高版本,则可以使用 JSON 路径查询很容易地做到这一点:

select jsonb_path_query_first(log, '$[*] ? (@.status == "delivered").date') #>> '{}' as delivery_date
from the_table;

jsonb_path_query_first 返回一个 jsonb 值,而表达式 #>> '{}' 将其转换为文本值。

如果您使用的是旧版本,则需要取消嵌套数组:

select (select l.element ->> 'date'
        from jsonb_array_elements(t.log) as l(element)
        where l.element ->> 'status' = 'delivered'
        limit 1) as delivery_date
from the_table t;

两个查询都假定该列被定义为jsonb(它应该是)。如果不是,则需要强制转换(例如log::jsonb

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多