我有下表:
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-09-16 23:59:59.000”。
但是当我执行查询时
select ISNULL(field3,field2) from #temp_1234结果是“2016-09-17:00:00:00”。
即使在这两个查询中返回相同的列,结果在这两种情况下是如何不同的呢?
我知道'smalldatetime‘在一分钟内是精确的,而'datetime’则是精确到1秒钟的。但是引入null检查如何改变返回结果的精度呢?
发布于 2016-09-06 22:40:26
发布于 2016-09-06 22:45:57
isnull将第二个值转换为第一个值格式。
更清楚的是:
声明@日期日期,@datetime datetime = getdate()选择isnull( @date,@datetime)
发布于 2016-09-07 05:48:16
select ISNULL(field3,field2) from #temp_1234当超出上述查询时,"field2“的值将转换为smalldatetime类型,因为field3的数据类型是smalldatetime。这就是ISNULL返回不同值的原因。要验证您可以运行以下查询:
select cast(field2 as smalldatetime) from #temp_1234在smalldatetime中,秒部分总是为零(00)。如果datetime值的秒大于或等于30秒以上,则向结果的smalldatetime值中添加1分钟,并将秒设置为零。在少于30秒的时间内,产生的smalldatetime值将秒部分设置为00,分钟部分与前面相同。
在你的例子中,datetime值是:'2016-09-16 23:59:59.000‘。由于datetime值的秒部分大于30,所以将1分钟添加到结果的smalldatetime值中,从而得到值:“2016-09-1700:00:00:00”。
https://stackoverflow.com/questions/39358628
复制相似问题