PostgreSQL jsonb_path_match_tz() 函数使用指南

PostgreSQL jsonb_path_match_tz() 函数返回一个 JSON 路径断言对一个指定的 JSON 值的执行结果。此函数与 jsonb_path_match() 的不同之处在于提供了对带有时区的日期/时间的支持。

jsonb_path_match_tz() 语法

这是 PostgreSQL jsonb_path_match_tz() 函数的语法:

jsonb_path_match_tz(
     target JSONB
   , path JSONPATH
  [, vars JSONB
  [, silent BOOLEAN]]
) -> BOOLEAN

参数

target
必需的。 要检查的 JSONB 值。
path
必需的。 要执行的 JSON 路径断言。
vars
可选的。 路径中要用到的变量值。
silent
可选的。 如果提供了此参数,并且为 true,该函数会像 @?@@ 操作符一样抑制相同的错误。

返回值

PostgreSQL jsonb_path_match_tz() 函数返回一个布尔值,它是一个 JSON 路径断言对一个指定的 JSON 值的执行结果。 t 表示指定的 JSON 值与指定的 JSON 路径匹配, f 表示指定的 JSON 值与指定的 JSON 路径不匹配。

如果任意一个参数是 NULL,jsonb_path_match_tz() 函数将返回 NULL。

jsonb_path_match_tz() 示例

基本示例

下面的示例展示了如何使用 PostgreSQL jsonb_path_match_tz() 函数检查在一个 JSON 数组中是否包含大于 1 的值。

SELECT jsonb_path_match_tz('[1, 2, 3]', 'exists($[*] ? (@ > 1))');
 jsonb_path_match_tz
---------------------
 t

这里,我们使用路径 $[*] ? (@ > 2) 来获取 JSON 数组 [1, 2, 3] 中的大于 2 的项。 而 exists($[*] ? (@ > 1)) 检查 JSON 数组中是否包含大于 2 的项。 该语句与下面的 jsonb_path_exists() 相同:

SELECT jsonb_path_exists('[1, 2, 3]', '$[*] ? (@ > 1)');
 jsonb_path_match_tz
---------------------
 t

时区

PostgreSQL jsonb_path_match_tz() 函数支持带时区的时间戳。如下:

select
    jsonb_path_match_tz(
        '["2015-08-01 12:00:00 +00"]',
        'exists($[*] ? (@.datetime() < "2015-08-02".datetime()))'
    );
 jsonb_path_match_tz
---------------------
 t