首页 > 解决方案 > 将从 SQL Server 日期列而不是 1900-01-01 返回空值的存储过程

问题描述

我正在使用存储过程来检索日期列并在我的 ASP.NET Web 表单中显示结果。结果显示日期列,就1900-01-01好像数据作为空值插入数据库一样。我需要它显示为空值。

这是我的代码:

 SELECT 
     *,
     CASE
        WHEN [DateField] = '1900-01-01' OR [DateField] IS NULL 
           THEN ''
     END AS [DateField]
 FROM 
     Table
 WHERE 
     MemberID = @MemberID

DateField列应该返回一个空值,但它仍然显示日期 1900-01-01

标签: sql-serverstored-procedures

解决方案


CASE表达式返回一个值,该值具有返回值的数据类型优先级 ( Data Type Precendence (Transact-SQL) )。在您case有 2 种数据类型;DateField其中(我假设)是 adate'',这是 a varchar(1)date具有比 a 更高的数据优先级,varchar因此''被隐式转换为 a date。并且(您可以使用 进行测试SELECT CAST('' AS date);)因此返回值是1900-01-01

我建议不要使用空字符串,而是返回NULL. 否则,您必须将[DateField]列转换为varchar; 这是个坏主意。您可以通过以下方式轻松实现此目的CASE

NULLIF([DateField],'19000101')

推荐阅读