You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中忽略TimeSpan天数部分存入Time(7)列

解决TimeSpan存入SQL Server Time(7)列的溢出问题

这个问题我之前也碰到过,SQL Server的Time(7)类型只支持存储00:00:00.0000000到23:59:59.9999999范围内的时间,当你的TimeSpan包含1天及以上的天数部分时,自然就会触发溢出错误。要忽略天数部分,只保留当天内的时分秒信息,有几个简单实用的方法:

方法一:用总小时数取模24

通过TotalHours获取TimeSpan的总小时数,对24取模后再转成新的TimeSpan,这样不管原TimeSpan有多少天,都会自动转换成当天内的时间:

// 示例:原TimeSpan为1天0小时
TimeSpan originalTs = TimeSpan.FromDays(1);
// 调整后得到00:00:00
TimeSpan adjustedTs = TimeSpan.FromHours(originalTs.TotalHours % 24);

比如原TimeSpan是3天2小时15分,调整后就会得到02:15:00,完全符合Time(7)的范围。

方法二:直接减去整数天数的时间

更直观的方式是,直接用原TimeSpan减去它包含的整数天数对应的时间,剩下的就是当天内的部分:

// 示例:原TimeSpan为1天3小时45分
TimeSpan originalTs = new TimeSpan(1, 3, 45, 0);
// 减去1天的时间,得到03:45:00
TimeSpan adjustedTs = originalTs.Subtract(TimeSpan.FromDays(originalTs.Days));

这种方法逻辑清晰,容易理解,适合需要明确看到“移除天数”操作的场景。

额外提示

如果你的TimeSpan是从DateTime对象转换来的,其实可以直接用DateTime.TimeOfDay属性,它本身就是一个范围在0到23:59:59之间的TimeSpan,天生就符合Time(7)的要求,不需要额外处理。

内容的提问来源于stack exchange,提问作者Abdulsalam Elsharif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:57:04