2013-04-02 6 views
1

Следующая не работает:SQL: значение случай возврата

SELECT ..., 
    CASE Foo.Date 
     WHEN '01.01.1900' THEN '' 
     ELSE Foo.Date 
END 
FROM BAR, ... 

Я хотел бы вернуть дату, если это значение не является 01.01.1900 (тип поля является DateTime). Есть ли такая возможность?

+0

Итак, Foo.Date - это поле DateTime? –

+0

Используйте 'WHEN '01 .01.1900 'THEN NULL'. – Rachcha

+0

Это DateTime, да. – mosquito87

ответ

3

Если литье это как VARCHAR не проблема, вы можете сделать что-то вроде:

SELECT ..., 
    CASE Foo.Date 
     WHEN '01.01.1900' THEN '' 
     ELSE cast(Foo.Date as varchar(50)) 
END as Date 
FROM BAR, ... 

В противном случае, если он должен остаться дату, вы должны будете использовать NULL вместо пустой строки:

SELECT ..., 
    CASE Foo.Date 
     WHEN '01.01.1900' THEN null 
     ELSE Foo.Date 
END as Date 
FROM BAR, ... 
0

Попробуйте это ...

SELECT ..., 
     (CASE WHEN Foo.Date!='01.01.1900' THEN Foo.Date 
     END) as Date 
    FROM BAR, ... 
0
SELECT ..., 
    CASE 
     WHEN CAST(Foo.Date AS DATE) = '01.01.1900' THEN '' 
     ELSE CAST(Foo.Date AS VARCHAR(25)) 
    END AS Date 
FROM BAR, ... 

Поскольку ваше поле DATETIME, это значение всегда будет содержать часть TIME и будет равно только точной дате, если это временная часть - 0:00 (полночь). Отбрасывая его в DATE, вы удалите часть времени, и вы сможете сравнить ее.

Также возвращение '' и дата в том же CASE неявно преобразуют вашу пустую строку в дату - это 01.01.1900 снова, поэтому вам нужно преобразовать дату в varchar в другую часть CASE или вернуть NULL вместо ' как в примерах Адама Плочера.

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