2013-08-02 59 views
1

我有以下查詢。在Informix中選擇NULL

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

我想在else情況下返回null,但是這會引發語法錯誤。如何解決這個問題?我也試過CAST(NULL AS DATETIME)

回答

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或類似的東西,修改相應的演員。但是,您需要在DATETIME之後<t1> TO <t2>

您可能仍然遇到CASE表達式中'aggregate vs non-aggregate'的問題。你可能會更好:

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

或者有可能是另一種方式來處理它。這取決於你期望的輸出。聚合爲整個表輸出一行; null是'每行'(這就是爲什麼我認爲會有麻煩)。您不指定GROUP BY子句。

1

你試過:

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

不具有else條款自動返回NULL