根据PostgreSQL中的条件删除数组中的元素
使用版本12 我有一个返回日期数组的查询。我试图获取一个查询,该查询返回数组,但删除第一个和最后一个日期以及任何星期二或星期四的日期 下面是它的样子: 从my_表中选择my_日期 因此,我要查找的查询应在第一行返回以下内容:根据PostgreSQL中的条件删除数组中的元素,sql,postgresql,Sql,Postgresql,使用版本12 我有一个返回日期数组的查询。我试图获取一个查询,该查询返回数组,但删除第一个和最后一个日期以及任何星期二或星期四的日期 下面是它的样子: 从my_表中选择my_日期 因此,我要查找的查询应在第一行返回以下内容: {'2019-11-02','2019-11-03','2019-11-04','2019-11-06','2019-11-08','2019-11-09','2019-11-10','2019-11-11','2019-11-13','2019-11-15','2019-
{'2019-11-02','2019-11-03','2019-11-04','2019-11-06','2019-11-08','2019-11-09','2019-11-10','2019-11-11','2019-11-13','2019-11-15','2019-11-16','2019-11-17'}
其中删除了以下日期元素:
“2019-11-01”-第一个要素
“2019-11-18”-最后一个要素
“2019-11-05”-星期二
“2019-11-07”-周四
2019-11-12——周二
“2019-11-14”-周四
你是一个不安的人,重新聚集。日期似乎是有序的,因此:
select (select array_agg(dte order by dte)
from (select dte, min(dte) over () as min_dte,
max(dte) over () as max_dte
from unnest(my_dates) dte
) dte
where dte not in (min_dte, max_dte) and
extract(dow from dte) not in (2, 4)
) as new_my_dates
from my_table;
注意:如果日期没有排序,并且确实希望删除第一个和最后一个元素,那么可以使用unnest with ordinality
select (select array_agg(dte order by dte)
from (select dte, min(dte) over () as min_dte,
max(dte) over () as max_dte
from unnest(my_dates) dte
) dte
where dte not in (min_dte, max_dte) and
extract(dow from dte) not in (2, 4)
) as new_my_dates
from my_table;