我有以下查询。
select case when <some condition> then max(modify_date) else NULL::DATETIME end from <table>
我想在 else 情况下返回 null ,但这会引发语法错误。如何解决?我也试过CAST(NULL AS DATETIME)
了。
您需要指定哪个 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 子句。
你有没有尝试过:
select (case when <some condition> then max(modify_date) end)
from <table>;
没有else
子句会自动返回NULL
。