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 数据库的主要内容,如果未能解决你的问题,请参考以下文章