1

以下不起作用:

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

如果日期不是 01.01.1900(字段类型为 DateTime),我想返回日期。有没有可能这样做?

4

3 回答 3

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, ...
于 2013-04-02T06:33:12.393 回答
0

试试这个...

 SELECT ..., 
        (CASE WHEN Foo.Date!='01.01.1900' THEN Foo.Date 
        END) as Date
    FROM BAR, ...
于 2013-04-02T06:36:45.900 回答
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 中返回 '' 和 date 会隐式地将您的空字符串转换为日期 - 再次是 01.01.1900,因此您需要在 CASE 的其他部分将 date 转换为 varchar,或者返回 NULL 而不是像 Adam 中的 ''普洛赫的例子。

于 2013-04-02T06:46:03.387 回答