1

我有以下查询。

select case when <some condition> then max(modify_date) else NULL::DATETIME end from <table>

我想在 else 情况下返回 null ,但这会引发语法错误。如何解决?我也试过CAST(NULL AS DATETIME)了。

4

2 回答 2

3

您需要指定哪个 DATETIME 类型。假设modify_date是 DATETIME YEAR TO DAY,那么您需要编写:

SELECT CASE
       WHEN <some condition>
       THEN MAX(modify_date)
       ELSE NULL::DATETIME YEAR TO DAY -- or CAST(NULL AS DATETIME YEAR TO DAY)
       END
  FROM <table>

如果modify_date实际上是 DATETIME YEAR TO SECOND 或类似的东西,请相应地更改演员表。但是,您需要<t1> TO <t2>DATETIME.

您可能仍会在 CASE 表达式中遇到“聚合与非聚合”的问题。你可能会更好:

SELECT MAX(CASE
           WHEN <some condition>
           THEN modify_date
           ELSE NULL::DATETIME YEAR TO DAY
           END)
  FROM <table>

或者可能有另一种方法来处理它。这取决于您期望的输出。聚合为整个表输出一行;null 是“每行一行”(这就是我认为会有麻烦的原因)。您没有指定 GROUP BY 子句。

于 2013-08-02T03:17:42.777 回答
1

你有没有尝试过:

select (case when <some condition> then max(modify_date) end)
from <table>;

没有else子句会自动返回NULL

于 2013-08-02T02:57:54.390 回答