将从 SQL Server Date 列(而不是 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

CASE表达式返回一个值,该值具有返回值的数据类型优先级(数据类型优先级 (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')
您可以使用

NULLIF

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

最新更新