Oracledb 查询以下用例

Oracledb query for the following usecase

我的空房 table 如下所示

AVAIL_DATE | AVAILABLE

AVAIL_DATE 表示停留日期,AVAILABLE 是一个带有 'T' 或 'F' 的字符。

我需要检查可用性 table 是否适用于给定范围内的所有日期(START_DATE、END_DATE)

我知道我可以像下面的查询那样实现它

Operate to check whether it's all true 

    Select AVAILABLE from AVAILABILITY 
    where AVAIL_DATE BETWEEN (START_DATE, END_DATE); 

我无法弄清楚操作部分,而且我不确定这个用例的最佳 oracledb 查询,因为我是 PL/SQL

的新手

有人可以帮我查询吗?

只需计算 T 个值的数量等于日期的数量:

SELECT CASE
       WHEN COUNT( CASE available WHEN 'T' THEN 1 END ) = COUNT(*)
       THEN 'All days available'
       ELSE 'Not available'
       END AS is_available
FROM   AVAILABILITY 
WHERE  DATE BETWEEN START_DATE AND END_DATE; 

请在您方便时阅读下文,但这是您的真/假...

SELECT COUNT(*)
  FROM AVAILABLE
 WHERE AVAIL_DATE BETWEEN START_DATE AND END_DATE
   AND AVAILABLE = 'F'

如果 return 计数大于 0,则您的条件为 FALSE

在您方便的时候阅读以下内容……很有用 首先,PL/SQL 是一门像 C/Java/C++/C# 一样的完整语言,带有 BULK COLLECT INTO 子句(您可能在此处需要)和其他几个部分……提前学习。是的,这听起来可能 "not contributing but critising",但请继续阅读以获得真正的细节。

您指定了一个名为 DATE 的列。由于 DATE 是 OracleDB 中的保留字,我建议将列名更改为 AVAIL_DATE.

Oracle 的 SQL 看起来像

SELECT AVAILABLE
  FROM AVAILABLE
 WHERE AVAIL_DATE BETWEEN START_DATE and END DATE

但是您可能会因此同时收到 T 和 F,因为它们都在一个日期范围内,它要么是 PL/SQL 中的 CURSOR,要么 PL/SQL 语句可以读作

SELECT AVAILABLE
  BULK COLLECT INTO collection_of_type_char_1
  FROM AVAILABLE
 WHERE AVAIL_DATE BETWEEN START_DATE and END DATE

学习PL/SQL中的集合("collection_of_type_char_1"上文)真是只能自己做。