【问题标题】:Oracle case expression trying to use column definitions after then之后 Oracle 案例表达式尝试使用列定义
【发布时间】: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 更短,或许也能解决您的问题。
  • 案例表达式,而不是语句

标签: sql oracle case


【解决方案1】:

一个更通用的表达式是这个:

COALESCE(A.DC_CLASSIFICATION_DATE,A.DC_TRANSFER_DATE) + REGEXP_SUBSTR(MRI.REVIEW_NAME, '\d+$')*7 AS REVIEW_END_DATE

它更短,应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 2011-12-24
    • 2017-06-16
    • 2011-09-26
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    相关资源
    最近更新 更多