搜索 PostgreSQL 数组列

Searching through PostgreSQL array columns

我正在尝试使用 PostgreSQL 数组。我添加了一列:

dates date[]

其中包含一个日期数组。我想要 select 行,其中至少有一个日期在一个范围内。

我发现唯一可行的解​​决方案是:

SELECT *
FROM archive
WHERE '2021-07-01' <= ANY(dates) AND '2021-09-30' >= ANY(dates);

在我看来,这看起来不自然。我通常会将目标值放在比较运算符之后。

我更喜欢这样的东西:

SELECT *
FROM archive
WHERE ANY(dates) BETWEEN '2021-07-01' AND '2021-09-30';

但这不起作用。

是否有其他方法进行此搜索?

您可以使用这个 WHERE 条件:

WHERE daterange('2021-07-01', '2021-09-30', '[]') @> ANY (dates)

这将测试区间是否包含任何 dates.

解释一些巫术可能会有所帮助:

  • daterange() 没有第三个参数会创建一个 half-open 范围——它包括第一个,但不包括最后一个日期。要创建 closed 日期范围,您需要第三个参数 '[]'。有关详细信息,请参阅 the documentation

  • @> 运算符测试右侧的元素是否包含在左侧的区间中。在这种情况下,第一个范围是否包括第二个范围?有关详细信息,请参阅 the documentation

  • <em><strong>运算符</strong></em>任意(<em><strong>数组</strong></em>) 将左侧表达式与右侧数组的每个成员进行比较。如果数组的任何元素满足比较,则结果为TRUE。同样,这里是 documentation link.