我有如下表:SQL Server | IsNull | datetime和smalldatetime
create table #temp_1234
(
field1 varchar(50) null,
field2 datetime null,
field3 smalldatetime null
)
,并说,我插入下面的一行到它:
insert into #temp_1234
(field1, field2, field3)
values ('Val1','2016-09-16 23:59:59.000',NULL)
如果我执行查询
select field2 from #temp_1234
我得到的结果是'2016-0 9-16 23:59:59.000'。
但是,当我执行查询
select ISNULL(field3,field2) from #temp_1234
结果变成了是 '2016年9月17日零时00分00秒'。
这是如何,即使在两个查询中同一列被返回,结果在两种情况下是不同的?
据我所知,“SMALLDATETIME”是精确高达一分钟,和“日期时间”是精确高达一秒钟。但是如何引入空检查会改变返回结果的精度?
isnull强制第一个输入的数据类型(或者说,将第二个输入转换为第一个)。例如'DECLARE @ var1 VARCHAR(5); DECLARE @ var2 VARCHAR(10)='asdfghjkl;'; SELECT ISNULL(@ var1,@ var2);'会产生'asdfg'...所以你迫使field2成为isnull中的一个小日期时间。 – ZLK