sql - 如何从 JSONB 列中提取数据

标签 sql json postgresql select jsonb

我们在 vehicle 表中以 JSONB 格式存储了一个 vehicle_info。

id |                                     vehicle_info(JSONB)                                     
----+------------------------------------------------------------------------------------
  1 | {"milestone": {"Honda_car": {"status":"sold"}}
  3 | {"milestone": {"Mitsubishi_car", {"status":"available"}}
  2 | {"milestone": {"Honda_car", {"status":"available"}}

如何提取后缀为car的数据。下面是我能想到但最终出错的。

select * from vehicle where milestone -> LIKE '%_car' ->>'status'

最佳答案

如果我没听错,您可以使用 jsonb_object_keys() 枚举键,然后过滤那些以 '_car' 结尾的键,最后提取值:

select t.*, t.vehicle_info -> 'milestone' -> k.val ->> 'status' status
from mytable t
cross join lateral jsonb_object_keys(t.vehicle_info -> 'milestone') as k(val)
where k.val like '%_car'

Demo on DB Fiddle :

id | vehicle_info                                               | status   
-: | :--------------------------------------------------------- | :--------
 1 | {"milestone": {"Honda_car": {"status": "sold"}}}           | sold     
 3 | {"milestone": {"Mitsubishi_car": {"status": "available"}}} | available
 2 | {"milestone": {"Honda_car": {"status": "available"}}}      | available

关于sql - 如何从 JSONB 列中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62439653/

相关文章:

sql - 等效于 HBase 中的 Order By 操作

sql - 如果选择 NULL,则保留单元格的原始值 MS SQL Server 2008

Python,JSON 如何检查用户选择的时间是否尚未被其他人预订?

SQL:如何查询一组数据并计算给定字符串列表中有多少匹配字符串

php - 在 Laravel 5.5 Migrations with Postgres 中定义字段

sql - SQL Server:按给定因子多次选择一行

mysql - 检查两个表中两行中是否存在数据

javascript - jQuery ajax 调用在 ajax 响应中返回 HTML 而不是 JSON

c# - 如何正确使用 JSON

sql - 查询 sql "event log"架构