SQL案例:返回案例值

时间:2013-04-02 06:30:24

标签: sql sql-server sql-server-2008

以下不起作用:

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

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

3 个答案:

答案 0 :(得分: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, ...

答案 1 :(得分:0)

试试这个......

 SELECT ..., 
        (CASE WHEN Foo.Date!='01.01.1900' THEN Foo.Date 
        END) as Date
    FROM BAR, ...

答案 2 :(得分: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的其他部分将日期转换为varchar,或者返回NULL而不是''就像Adam Plocher的例子一样。