我有如下表: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