我有以下查询。
select case when <some condition> then max(modify_date) else NULL::DATETIME end from <table>
我想在else的情况下返回null,但这会引发语法错误。如何解决这个问题?我也试过CAST(NULL AS DATETIME)
。
答案 0 :(得分:3)
您需要指定哪种DATETIME类型。假设modify_date
是DATETIME YEAR 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子句。
答案 1 :(得分:1)
你试过了吗?
select (case when <some condition> then max(modify_date) end)
from <table>;
没有else
子句自动返回NULL
。