PostgreSQL JSONB:如何获取第一个存在的路径对应的值
获取JSONB中第一个存在的路径值(PostgreSQL)
可以实现,你之前的语句执行失败是因为jsonb_path_query_first不支持直接传入多个独立路径作为参数,必须用符合规范的JSON路径表达式或其他组合方式实现“优先匹配第一个存在路径”的逻辑。
方法一:用JSON路径表达式的逻辑或(推荐)
利用JSON路径的||逻辑或运算符,结合exists()检查路径是否存在,表达式会按顺序匹配第一个存在的路径并返回对应值:
SELECT jsonb_path_query_first( jsonb_data, '$.address.region ? (@ exists()) || $.phone ? (@ exists())' ) FROM your_table;
针对你提供的JSON数据,这个语句会返回1234567(因为$.address.region不存在,自动匹配下一个路径$.phone)。
方法二:用coalesce组合单个路径查询
通过coalesce函数依次检查每个路径的查询结果,返回第一个非空值:
SELECT coalesce( jsonb_path_query_first(jsonb_data, '$.address.region'), jsonb_path_query_first(jsonb_data, '$.phone') ) FROM your_table;
这个写法更直观,适合路径较多的场景,同样会返回1234567。
内容的提问来源于stack exchange,提问作者Shay Zambrovski
相关产品推荐
相关产品推荐

