2013-08-02 4 views
1

У меня есть следующий запрос.Выбор значения null в Informix SQL

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

Я хочу вернуть значение 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 или что-то подобное, изменить оттенок соответственно. Тем не менее, вам необходимо <t1> TO <t2> после DATETIME.

В выражении CASE все еще может возникнуть проблема с «агрегатом против неагрегата». Вам может быть лучше с:

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

Или может быть другой способ справиться с этим. Это зависит от того, что вы ожидаете от вывода. Совокупность выводит одну строку для всей таблицы; нуль - это «строка за строку» (поэтому я думаю, что будут проблемы). Вы не указываете предложение GROUP BY.

1

Вы пробовали:

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

Не имея пункт else автоматически возвращает NULL.

Смежные вопросы