PostgreSQL jsonb_path_query_array_tz() 函数使用指南
PostgreSQL jsonb_path_query_array_tz()
函数在一个给定的 JSON 中根据指定的路径获取值,并将所有匹配的值作为一个数组返回。此函数与 jsonb_path_query_array()
的不同之处在于提供了对带有时区的日期/时间的支持。
jsonb_path_query_array_tz()
语法
这是 PostgreSQL jsonb_path_query_array_tz()
函数的语法:
jsonb_path_query_array_tz(
target JSONB
, path JSONPATH
[, vars JSONB
[, silent BOOLEAN]]
) -> JSONB
参数
target
- 必需的。 要检查的 JSONB 值。
path
- 必需的。 要检查的 JSON 路径,它是
JSONPATH
类型的。 vars
- 可选的。 路径中要用到的变量值。
silent
- 可选的。 如果提供了此参数,并且为
true
,该函数会像@?
和@@
操作符一样抑制相同的错误。
返回值
PostgreSQL jsonb_path_query_array_tz()
函数返回一个 JSON 数组,它包含了在指定的 JSON 值中所有与指定的路径匹配的值。
如果任意一个参数是 NULL,jsonb_path_query_array_tz()
函数将返回 NULL。
jsonb_path_query_array_tz()
示例
JSON 数组
下面的示例展示了如何使用 PostgreSQL jsonb_path_query_array_tz()
函数从一个 JSON 数组中根据指定的路径获取值。
SELECT jsonb_path_query_array_tz('[1, 2, 3]', '$[*] ? (@ > 1)');
jsonb_path_query_array_tz
---------------------------
[2, 3]
我们可以在 JSON 路径中使用变量,如下:
SELECT jsonb_path_query_array_tz(
'[1, 2, 3, 4]',
'$[*] ? (@ >= $min && @ <= $max)',
'{"min": 2, "max": 3}'
);
jsonb_path_query_array_tz
---------------------------
[2, 3]
这里,我们在 JSON 路径 $[*] ? (@ >= $min && @ <= $max)
中使用了两个变量 min
和 max
,并且我们在参数 var
中为变量提供了值 {"min": 2, "max": 3}
,这样,JSON 路径变成了 $[*] ? (@ >= 2 && @ <= 3)
。也就是说,该函数用来返回数组 [1, 2, 3, 4]
中的大于等 2 并且小于等于 3 的所有的值。
JSON 对象
下面的示例展示了如何使用 PostgreSQL jsonb_path_query_array_tz()
函数从一个 JSON 对象中根据指定的路径获取值。
SELECT jsonb_path_query_array_tz(
'{"x": 1, "y": 2, "z": 3}',
'$.* ? (@ >= 2)'
);
jsonb_path_query_array_tz
---------------------------
[2, 3]
这里, JSON 路径 $.* ? (@ >= 2)
表示在 JSON 对象 {"x": 1, "y": 2, "z": 3}
中的顶层成员的值中所有大于 2 的值。
时区
PostgreSQL jsonb_path_query_array_tz()
函数支持带时区的时间戳。如下:
select
jsonb_path_query_array_tz(
'["2015-08-01 12:00:00 +00"]',
'$[*] ? (@.datetime() < "2015-08-02".datetime())'
);
jsonb_path_query_array_tz
-----------------------------
["2015-08-01 12:00:00 +00"]