【问题标题】:CASE SQL statement oracle databaseCASE SQL 语句 oracle 数据库
【发布时间】:2020-12-11 12:15:01
【问题描述】:

我的要求是如果第一个条件为空,则检查第二个条件,如果第二个条件为空,然后是 oracle 数据库中的第三个条件,所以我试图通过 case 语句来实现这一点,如下所示,但得到一个错误为缺失表达式/缺少关键字。

CASE
     WHEN (TRUNC( OTA_EVENTS.COURSE_START_DATE) BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE ) IS NULL  
     then  (TRUNC(OTA_DELEGATE_BOOKINGS.Date_Booking_Placed) BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE) 
     ELSE (TRUNC(OTA_DELEGATE_BOOKINGS.DATE_STATUS_CHANGED) BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE) 
END

如果有其他方法可以实现,请提供帮助

【问题讨论】:

  • 样本数据和期望的结果肯定会有所帮助。这个问题很清楚。代码示例似乎与问题无关。

标签: sql oracle if-statement case between


【解决方案1】:

我的要求是如果第一个条件为空,则检查第二个条件,如果第二个条件为空,那么在 oracle 数据库中检查第三个条件

我看不出你的代码与这个问题有什么关系(它使用between而不是NULL比较。A但你描述的是COALESCE()

select coalesce(a, b, c)

这可以根据需要使用任意数量的参数。它返回第一个非NULL 值。

【讨论】:

    【解决方案2】:

    这意味着你的条件之间需要OR

    (TRUNC(OTA_EVENTS.COURSE_START_DATE) 
                BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE 
                    AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE
    OR ( TRUNC(OTA_DELEGATE_BOOKINGS.DATE_BOOKING_PLACED) 
                BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE 
                    AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE )
    OR ( TRUNC(OTA_DELEGATE_BOOKINGS.DATE_STATUS_CHANGED) 
                BETWEEN PER_ALL_ASSIGNMENTS_F.EFFECTIVE_START_DATE 
                    AND PER_ALL_ASSIGNMENTS_F.EFFECTIVE_END_DATE ))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      相关资源
      最近更新 更多