【发布时间】:2018-05-25 10:56:53
【问题描述】:
我正在开发一个将 Oracle 12c 用于 RDMS 的 Web 应用程序。
我已经停止了我想要实现的目标,因此寻求一些帮助/指导来解决我的问题。
我有以下 SQL 案例语句,它运行但返回空值:
CASE MRI.REVIEW_NAME
WHEN 'wk1' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 7
WHEN 'wk2' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 14
WHEN 'wk3' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 21
WHEN 'wk4' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 28
WHEN 'wk5' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 35
WHEN 'wk6' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 42
WHEN 'wk7' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 49
WHEN 'wk8' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 56
WHEN 'wk9' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 63
WHEN 'wk10' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 70
WHEN 'wk11' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 77
WHEN 'wk12' THEN COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + 84
END AS REVIEW_END_DATE,
这可能吗,我发现的所有示例都在 THEN 之后使用字符串值而不是列操作? 请不要 PL/SQL 答案,只要 SQL。
好的,更新,数据导致了问题,现在按预期工作。谢谢你,因为我了解到一些我认为不可能的 Oracle Case 语句。
任何帮助表示赞赏。 JC
【问题讨论】:
-
您不必从 case 语句中返回字符串值,因此很可能还有其他问题,例如
MRI.REVIEW_NAME的值是 WK1 而不是 wk1 -
如果 CASE 返回
NULL,则没有任何值与review_name列的内容匹配。 -
如果您到处都收到
NULL,我会指出ELSE情况正在发生。由于您没有指定一个,默认返回NULL。请向我们展示一些示例数据。 -
COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + REGEXP_SUBSTR(MRI.REVIEW_NAME, '\d+$')*7 AS REVIEW_END_DATE更短,或许也能解决您的问题。 -
案例表达式,而不是语句。