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"上文)真是只能自己做。
我的空房 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"上文)真是只能自己做。