CASE SQL 语句 oracle 数据库

Posted

技术标签:

【中文标题】CASE SQL 语句 oracle 数据库【英文标题】:CASE SQL statement oracle database 【发布时间】: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

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

【问题讨论】:

样本数据和期望的结果肯定会有所帮助。这个问题很清楚。代码示例似乎与问题无关。 【参考方案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 ))

【讨论】:

以上是关于CASE SQL 语句 oracle 数据库的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句case怎么判断这个字段为空

在oracle sql语句里有没有if...else...的用法,请各位大侠给个例子看看,灰常感谢!!

CASE 语句 [Oracle/SQL]

SQL语句case when

SQL语句case怎么判断这个字段为空

在 where 子句中使用 case 语句的 Oracle Missing 关键字