选择表达式时如何做大小写?

Posted

技术标签:

【中文标题】选择表达式时如何做大小写?【英文标题】:How to do case when expression in select? 【发布时间】:2019-06-17 08:01:27 【问题描述】:

我尝试使用 case when 表达式执行 select 语句。 我收到一个错误

无效的sql语句

这是针对 Oracle SQL 的:

SELECT DATUM_EINDE AANPAK,
       CASE WHEN DATUM_EINDE_AANPAK IS NULL THEN DATUM_EINDE_AANPAK
       ELSE MAX(DATUM_EINDE_AANPAK)
       END AS DATUM_EINDE_AANPAK
FROM T_CJIB_CVE;

【问题讨论】:

您在使用聚合函数时可能需要 group by 您确定您的表有一个名为DATUM_EINDE 的列以及一个名为DATUM_EINDE_AANPAK 的列吗?您可能错过了第一行中的下划线。 查看此链接:techonthenet.com/oracle/functions/case.php 轻松为您提供帮助:***.com/help/minimal-reproducible-example(您将获得更好的答案,更快。) 【参考方案1】:

如果我理解正确的话,我猜这就是你要找的;对于 ID = 2,数据为空,因此 - 从整个表中取最大的数据。

SQL> with t_cjib_cve (id, datum_einde_aanpak) as
  2    (select 1, date '2019-06-17' from dual union all
  3     select 2, null              from dual union all
  4     select 3, date '2019-01-01' from dual
  5    )
  6  select datum_einde_aanpak,
  7         case when datum_einde_aanpak is null then
  8                     (select max(datum_einde_aanpak) from t_cjib_cve)
  9              else datum_einde_aanpak
 10         end result
 11  from t_cjib_cve;

DATUM_EIND RESULT
---------- ----------
2019-06-17 2019-06-17
           2019-06-17
2019-01-01 2019-01-01

SQL>

【讨论】:

【参考方案2】:

像下面这样使用最大值

SELECT DATUM_EINDE, AANPAK,
       max(CASE WHEN DATUM_EINDE_AANPAK IS NULL THEN DATUM_EINDE_AANPAK
       ELSE DATUM_EINDE_AANPAK END)
        AS DATUM_EINDE_AANPAK
FROM T_CJIB_CVE group by DATUM_EINDE, AANPAK

【讨论】:

【参考方案3】:

使用 CASE 和子查询来检索最大日期

SELECT CASE WHEN datum_einde_aanpak IS NULL THEN null
  ELSE (SELECT MAX(datum_einde_aanpak) as max_date FROM t_cjib_cve) 
  END as datum_einde_aanpak
FROM t_cjib_cve a

【讨论】:

以上是关于选择表达式时如何做大小写?的主要内容,如果未能解决你的问题,请参考以下文章

如何写匹配任意个26个大小写字母,数字和下划线的Java正则表达式呢?

用word做论文,如何快速设置栏公式编辑器里面的公式文字大小跟我的正文一样,都是一样的大小?急急急、、、

C# switch 表达式 null 大小写

选择大小写转换未正确显示,我该如何解决?

java图形界面 运行时如何在点击鼠标时 改变字体颜色或者大小

当git上只做文件大小写重命名的修改时,如何躲坑