代码之家  ›  专栏  ›  技术社区  ›  Aarish Ramesh

Oracledb查询以下用例

  •  0
  • Aarish Ramesh  · 技术社区  · 6 年前

    我有如下可用性表

    AVAIL_DATE | AVAILABLE
    

    AVAIL\u DATE表示停留日期,AVAILABLE是带有“T”或“F”的字符。

    我需要检查可用性表是否对给定范围内的所有日期都为true(START\u DATE、END\u DATE)

    我知道我可以做到如下查询

    Operate to check whether it's all true 
    
        Select AVAILABLE from AVAILABILITY 
        where AVAIL_DATE BETWEEN (START_DATE, END_DATE); 
    

    我不知道操作部分,而且我也不确定这个用例的最佳oracledb查询,因为我是PL/SQL的新手

    有人能帮我查询一下吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   MT0    6 年前

    数一数 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; 
    
        2
  •  -1
  •   Kobi    6 年前

    在你方便的时候阅读下面的内容,但这里是你的真/假。。。

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

    如果返回计数大于0,则条件为FALSE

    在您方便的时候阅读下面的内容。。。是有用的 首先,PL/SQL是一种像C/Java/C++/C一样的完整语言,它带有大容量COLLECT-INTO子句(这里可能需要)和其他几个部分。。。未来的重大学习。是的,这听起来可能“不是贡献而是批评”,但请继续阅读,了解真正的细节。

    您可以指定一个名为DATE的列。由于DATE在OracleDB中是一个保留字,我建议将列名更改为AVAIL\u DATE。

    Oracle的SQL如下所示

    SELECT AVAILABLE
      FROM AVAILABLE
     WHERE AVAIL_DATE BETWEEN START_DATE and END DATE
    

    但您可能会同时收到T和F,因为这两个都在一个日期范围内,该日期范围要么是PL/SQL中的游标,要么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\u of\u type\u char\u 1”)实际上是您只能自己做的事情。