SQL技术问题:如何获取下一分钟的起始时间值
获取下一分钟的起始时间解决方案
我来帮你搞定这个SQL里获取下一分钟起始时间的问题~
首先得说,你当前的代码SELECT DATEADD(mi, @increase,@date) as nextminutedate;其实是把当前时间直接加了1分钟,会保留原时间的秒数——比如原时间是19.11.2019 12:52:51,运行后得到的是19.11.2019 12:53:51,这显然不是你想要的下一分钟起始时间(也就是秒数为0的12:53:00)。
那怎么调整呢?核心思路是先把当前时间截断到分钟级别(秒数归零),再加1分钟,或者反过来先加1分钟再截断到分钟,两种方式都能实现需求。
方法一:截断当前时间到分钟后加1分钟
这个方法逻辑很清晰,先把当前时间转成当前分钟的起始点(比如12:52:51变成12:52:00),再加1分钟就得到下一分钟的起始:
DECLARE @date DATETIME = GETDATE(); DECLARE @increase int = 1; SELECT DATEADD(mi, DATEDIFF(mi, 0, @date) + @increase, 0) AS nextminutedate;
逻辑解释:
DATEDIFF(mi, 0, @date):计算从SQL的默认基准时间1900-01-01 00:00:00到当前时间的总分钟数,这一步相当于把时间“压缩”成了分钟计数。- 加上
@increase(也就是1),得到下一分钟的总分钟数。 DATEADD(mi, ..., 0):把这个总分钟数加回基准时间,就得到了秒数和毫秒数都为0的下一分钟起始时间。
方法二:先加1分钟再截断到分钟
如果习惯先做时间增量再处理,也可以用这个写法,结果是一样的:
DECLARE @date DATETIME = GETDATE(); DECLARE @increase int = 1; SELECT DATEADD(mi, DATEDIFF(mi, 0, DATEADD(mi, @increase, @date)), 0) AS nextminutedate;
这个是先把原时间加1分钟,再把结果截断到分钟级别,同样会把秒数归零,得到12:53:00。
用你的测试例子验证:当@date是19.11.2019 12:52:51时,两种方法都会返回19.11.2019 12:53:00,完全符合你的需求~
内容的提问来源于stack exchange,提问作者Banala Amarnath
相关产品推荐
相关产品推荐

