如何从PostgreSQL的jsonb列中提取指定PropertyTypeId的JSON元素值
提取PostgreSQL jsonb数组中指定条件的Value值
针对你要从jsonb数组中提取PropertyTypeId为2的Value值的需求,这里提供两种简洁的实现方式:
方法一:使用jsonb_path_query(推荐)
这种方式直接通过JSON路径表达式筛选并提取目标值,无需拆分数组,返回单行结果:
SELECT jsonb_path_query(tbl.jsonb_column, '$[*] ? (@.PropertyTypeId == 2).Value') AS target_value FROM tbl;
路径表达式说明:
$[*]:遍历jsonb数组中的所有元素? (@.PropertyTypeId == 2):筛选出PropertyTypeId等于2的元素.Value:提取该元素的Value字段值
方法二:使用jsonb_array_elements配合过滤
通过拆分数组后筛选目标元素,再提取对应Value:
SELECT elem->>'Value' AS target_value FROM tbl, jsonb_array_elements(tbl.jsonb_column) AS elem WHERE elem->'PropertyTypeId' = '2'::jsonb;
这里用elem->'PropertyTypeId' = '2'::jsonb是直接对jsonb类型的数字进行比较,比转成字符串更严谨。
原语句无法满足需求的原因
你之前的jsonb_array_elements(tbl.jsonb_column)@>'{"PropertyTypeId": 2}'会先把数组拆成3行元素,然后用@>判断每个元素是否包含指定的键值对,返回的是布尔值(true/false),而不是提取对应的Value值,所以会得到3行结果而非你需要的单行目标值。
内容的提问来源于stack exchange,提问作者r-work
相关产品推荐
相关产品推荐

