以下不起作用:
SELECT ...,
CASE Foo.Date
WHEN '01.01.1900' THEN ''
ELSE Foo.Date
END
FROM BAR, ...
如果它的值不是01.01.1900(字段类型是DateTime),我想返回日期。 有没有可能这样做?
答案 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的例子一样。