SQL大小写:返回大小写值

SQL大小写:返回大小写值,sql,sql-server,sql-server-2008,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。 有这样做的可能性吗?如果将其转换为varchar不成问题,您可以执行以下操作: SELECT ..., CASE Foo.Date WHEN '01.01.1900

以下操作不起作用:

SELECT ..., 
    CASE Foo.Date
        WHEN '01.01.1900' THEN ''
        ELSE Foo.Date
END
FROM BAR, ...
如果日期的值不是01.01.1900,我想返回日期字段类型是DateTime。
有这样做的可能性吗?

如果将其转换为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, ...
试试这个

 SELECT ..., 
        (CASE WHEN Foo.Date!='01.01.1900' THEN Foo.Date 
        END) as Date
    FROM BAR, ...
由于您的字段是DATETIME,所以它的值将始终包含时间部分,并且仅当它的时间部分为0:00 midnight时才等于确切日期。将其转换为最新将删除时间部分,您可以对其进行比较


同样,在同一个案例中返回和date将隐式地将空字符串转换为date,即01.01.1900,因此在案例的其他部分,您需要将date转换为varchar,或者返回NULL,而不是像Adam Plocher的示例中那样

所以Foo.Date是一个DateTime字段?当'01.01.1900'为空时使用。它是一个DateTime,是的。
SELECT ..., 
    CASE 
        WHEN CAST(Foo.Date AS DATE) = '01.01.1900' THEN ''
        ELSE CAST(Foo.Date AS VARCHAR(25))
    END AS Date
FROM BAR, ...