2013-04-02 133 views
1

下不工作:SQL案例:返回案值

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

我想返回日期,如果它的值不是01.01.1900(字段類型爲DATETIME)。 有沒有可能這樣做?

+0

So 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,因此您需要將日期轉換爲CASE其他部分中的varchar,或返回NULL而不是' 「就像Adam Plocher的例子。