DateTime:字段类型对应的时间格式是 yyyy-MM-dd HH:mm:ss.fff ,3个f,精确到1毫秒(ms),示例 2023-01-07 10:06:15.433 。
DateTime2:字段类型对应的时间格式是 yyyy-MM-dd HH:mm:ss.fffffff ,7个f,精确到0.1微秒(μs),示例 2023-01-07 10:23:19.2880929 。
DateTime2(3):精确到3位毫秒
注意:如果用SQL的日期函数进行赋值,DateTime字段类型要用 GETDATE() ,DateTime2字段类型要用 SYSDATETIME() 。
datetime2支持datetime.minvalue,即0001/01/01
-- 使用datetime计算毫秒会导致精度丢失,datetime2可避免该问题
declare @starttime datetime2,@endtime datetime2
set @starttime='2012-10-07 10:5
\7:23.900'
set @endtime ='2012-10-07 10:57:23.957'
-- 方式1
-- DATEDIFF(ms,,)计算出的毫秒数会差1毫秒,将时间类型转换为datetime2可避免
SELECT DATEDIFF(ms,@starttime,@endtime)
SELECT DATEDIFF_BIG(ms,@starttime,@endtime)
-- datepart(mcs,)可以精确到微秒,计算仍然有偏差,将时间类型转换为datetime2可避免
SELECT datepart(mcs,@endtime)/1000-datepart(mcs,@starttime)/1000
-- 方式2
-- DATEDIFF(s,,)计算出秒后换算成毫秒后再加相差的毫秒数
SELECT DATEDIFF_BIG(s, @starttime, @endtime)*1000 + (datepart(mcs,@endtime)/1000-datepart(mcs,@starttime)/1000)