问题描述
我需要一个自定义解决方案来解决用户可以选择多个不同区间进行数据比较的问题。
示例:
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(数组)需要一个运算符来产生布尔值
解决方法
您可以使用 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'