我有一个日期列表。 该列表将作为 java 集合传递。 该列表是动态的。我想检查列表中的日期是否在我的 startDate 和 endDate 之间,最好不使用存储过程。
我可以遍历列表并对列表中的每个开始日期/结束日期对执行查询。 但是是否可以避免迭代并在一条语句中完成所有操作?
类似
select * from myTable
where <datesInList> between startDate and endDate;
Oracle 有办法做到这一点吗?
最佳答案
您可以使用 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;
关于Oracle - 如何查找给定列表中的日期是否在日期范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33999216/