我有一个如下所示的可用性表
AVAIL_DATE | AVAILABLE
AVAIL_DATE代表逗留日期,AVAILABLE是一个字母,其中包含' T'或者' F'。
我需要检查可用性表是否适用于给定范围内的所有日期(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的新手
有人可以帮我查询吗?
答案 0 :(得分:2)
只计算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;
答案 1 :(得分:-1)
在您方便的时候阅读以下内容,但这是您的真/假...
SELECT COUNT(*)
FROM AVAILABLE
WHERE AVAIL_DATE BETWEEN START_DATE AND END_DATE
AND AVAILABLE = 'F'
如果返回计数大于0,则条件为FALSE
在您的方便之下阅读......有用 首先,PL / SQL是一个完整的语言,如C / Java / C ++ / C#,带有BULK COLLECT INTO子句(这里你可能需要)和其他几个部分......大大提前学习。是的,这可能听起来没有贡献,但批评",但继续阅读真实细节。
指定名称为DATE的列。由于DATE是OracleDB中的保留字,因此我建议将列名更改为AVAIL_DATE。
SQL for Oracle看起来像
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"上面)是你自己只能做的事情。