我正在使用存储过程检索日期列并在 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