SqlServer怎么计算两个日期之差,精确到毫秒计算—实例

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)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咏絮v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值