SQL Server Isnull 当字段为空时返回 1900-01-01

Jua*_*lez 16 sql-server sql-server-2012 datetime

当 DOB 字段为空时,以下代码返回 1900-01-01。我想要(并期望)它返回一个空字符串(''),但事实并非如此。我应该如何继续获得我想要的结果?

isnull(convert(date,DOB,1),'')
Run Code Online (Sandbox Code Playgroud)

Low*_*n M 24

您无法获得空字符串,因为您DATE要从返回值类型ISNULL

根据文档ISNULL

返回与 check_expression 相同的类型。如果提供文字 NULL 作为 check_expression,则返回 replacement_value 的数据类型。如果提供文字 NULL 作为 check_expression 并且没有提供 replacement_value,则返回一个 int。

如果您正在检查该值是否为NULL,则无需将其转换为日期,除非您想返回日期值(您似乎没有这样做)。

相反,使用:

SELECT ISNULL( DOB , '')
Run Code Online (Sandbox Code Playgroud)

哪个会返回

''
Run Code Online (Sandbox Code Playgroud)

如果值为NULL.

NULL日期是NULL(没有值)。另一方面,空字符串的计算结果为0,它在 SQL Server 中隐含地是一个整数,表示自 以来的天数1900-01-01