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)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐