当日期字段为NULL时,为什么SQL查询返回“ 01/01/1900”而不是空字符串?

时间:2019-02-22 22:06:56

标签: sql date null

我正在测试一些SQL查询返回值。

我要选择的表在NULL字段中有一个值CloseDate。 我有一个逻辑检查它是否为NULL,返回一个空字符串。但是,它返回01/01/1900

declare @value varchar(50) = '2346677888'
    Set @Value=@Value +'%'

    select CONVERT(varchar,ISNULL(m.CloseDate,''),101) as CloseDate from( 
    SELECT m.EdsClosedDate AS CloseDate
    FROM [dbo].[tblMyTable] m                   
    WHERE MID like @value) m

查询出了什么问题?

1 个答案:

答案 0 :(得分:1)

此表达式:

select CONVERT(varchar, ISNULL(m.CloseDate, ''), 101) as CloseDate

更清楚地写为:

select CONVERT(varchar(255), COALESCE(m.CloseDate, 0), 101) as CloseDate

也就是说,空字符串等效于日期值“ 0”。 SQL Server从1900-01-01开始计数日期,这就是为什么您在结果中看到该日期的原因。

我不确定您的期望。如果您想要一个空字符串,请在 之后将该值转换为字符串:

select COALESCE(CONVERT(varchar(255), m.CloseDate, 101), '') as CloseDate