我有一个datetime2
名为的列DocDate
,我正在尝试评估一个ISNULL
检查以返回一个空白''
值而不是NULL
.
声明的片段:
SELECT TOP 100
DocumentId
,DocDate
,ISNULL(DocDate,'') AS 'DocDateEmpty'
FROM
DocDetails
WHERE
DocDate IS NULL
这将返回:1900-01-01 00:00:00.0000000
我的WHERE
子句清楚地只带回显式的行NULL
,因此它不是DocDate
一个空字符串并评估为的问题0
。
如何DocDate IS NULL
正确评估但ISNULL
失败?
根据MSDN,ISNULL
应该正确评估文字 NULL
值并返回一个空值。
返回与check_expression相同的类型。如果提供文字 NULL 作为check_expression,则返回replacement_value的数据类型。如果提供了文字 NULL 作为check_expression并且没有提供replacement_value,则返回一个int。
这将发生
DATETIME
在以及DATETIME2
:随着
DATE
和TIME
我认为最简单的方法是在
CONVERT
字符串中添加第二个:根据需要返回一个空字符串。
为了回答你关于为什么的问题,好吧,让我们看另一个场景:
这里
ISNULL
返回 0。如果您不了解 SQL Server 如何存储和处理日期,请在此处查看我的问答了解更多信息。简而言之,如果你运行
SELECT CONVERT(DATETIME, 0)
,你会得到一个熟悉的结果。没有空数字这样的东西,也没有空字符串到数字表达式的转换。希望这可以帮助!