Oracle - 如何查找给定列表中的日期是否在日期范围内

标签 oracle

我有一个日期列表。 该列表将作为 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/

相关文章:

.net - 将 Entity Framework 与 Oracle 伪 bool 值结合使用

oracle - 如何下载安装 "oracle-xe-11.2.0-1.0.x86_64.rpm.zip"

python - spark 从 oracle 导入数据 - java.lang.ClassNotFoundException : oracle. jdbc.driver.OracleDriver

Sql添加字符串和数字并将其显示为单列

php - 获取特定时间之间存储的数据

sql - 如何连接来自 2 个不同模式但在同一数据库中的 2 个表

SQL 多条件累加和

mysql - 使用 SQL 更新多行

mysql - 给出所有不教数学的老师的名字

Java SQL 结果集数据类型