Postgres 根据区间数组选择日期

问题描述

我需要一个自定义解决方案来解决用户可以选择多个不同区间进行数据比较的问题。

示例:

CURRENT_DATE - interval '1 day'
CURRENT_DATE - interval '4 day'
CURRENT_DATE - interval '7 day'

等等

所以我正在寻找一种解决方案,在该解决方案中我可以像

这样的间隔传递整数数组
select CURRENT_DATE - interval '1day' * any(ARRAY[1,4,7])

但这是不可能的,因为

op ANY/ALL(数组)需要一个运算符来产生布尔值

解决方法

demos:db<>fiddle

您可以使用 unnest() 将数组元素提取到每个元素一个记录中,然后返回 CURRENT_DATE 减去这些元素中的每一个:

SELECT
    CURRENT_DATE - array_element
FROM unnest(ARRAY[1,4,7]) as array_element

当然,您可以将 unnest() 放入 SELECT 列表中:

SELECT CURRENT_DATE - unnest(ARRAY[1,7])

编辑:

如果您需要除天以外的其他日期范围,您可以为此使用间隔:

SELECT CURRENT_DATE - unnest(ARRAY[1,7]) * interval '1 week'