存储过程将从SQL Server Date列而不是1900-01-01返回空值

时间:2018-12-28 17:24:05

标签: sql-server stored-procedures

我正在使用存储过程来检索日期列,并将结果显示在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

2 个答案:

答案 0 :(得分:2)

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

建议不要返回空字符串,而建议返回NULL。否则,您必须将[DateField]列转换为varchar;那是个坏主意。通过将CASE替换为:

NULLIF([DateField],'19000101')

答案 1 :(得分:0)

您可以使用NULLIF

SELECT col1, col2, ..., NULLIF([DateField] , '19000101') AS [DateField]
FROM Table_name
WHERE MemberID = @MemberID