在Informix SQL中选择null

时间:2013-08-02 02:56:43

标签: sql informix

我有以下查询。

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

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

2 个答案:

答案 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