Oracle - 如何查找给定列表中的日期是否介于日期范围之间

时间:2015-11-30 12:57:39

标签: oracle

我有一份日期清单。 该列表将作为java集合传递。 该清单是动态的。我想检查列表中的日期是否在我的startDate和endDate之间,而不是使用存储过程,最好。

我可以遍历列表并对列表的每个startDate / endDate对执行查询。 但是有可能避免迭代并在一个语句中完成所有操作吗?

这样的东西
select * from myTable
where <datesInList> between startDate and endDate;

Oracle有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

您可以使用TABLE函数将数组转换为表,然后在SQL查询中使用它。例如:

DECLARE
  v_dates sys.ODCIDateList := sys.ODCIDateList(TO_DATE('01-01-2001','DD-MM-RRRR'), 
                                               TO_DATE('01-02-2001','DD-MM-RRRR'),
                                               TO_DATE('01-03-2001','DD-MM-RRRR'),
                                               TO_DATE('01-04-2001','DD-MM-RRRR'));
  n NUMBER;  
BEGIN
  SELECT COUNT(1)
  INTO n
  FROM TABLE(v_dates)
  WHERE COLUMN_VALUE NOT BETWEEN start_date AND end_date;

  IF n > 0 THEN
    dbms_output.put_line('There''s ' || n || ' dates out of the range');
  ELSE
    dbms_output.put_line('All dates are in the range');
  END IF;    
END;