Postgres select 基于区间数组的日期

Postgres select date on the basis of interval array

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

示例:

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 (array) requires an operator to yield boolean

demos:db<>fiddle

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

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

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

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

编辑:

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

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