首页 > 解决方案 > SQL Server:让 DATETIME 持续 30 分钟

问题描述

我有一个小型存储过程(在 SQL Server 2012 中),它计算自年初以来的分钟数(以及其他一些事情)。目前它计算到当前时间的分钟数,它正在2019-01-02 10:29:28.910使用:

SET @startDate = (SELECT DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0))
SET @endDate = GETDATE()

SELECT DATEDIFF(MINUTE, @startdate, @endDate)

理想情况下,我想将其更改为最后 30 分钟标记,因此如果我现在运行它,它将显示2019-01-02 10:00:00.000,如果我运行它,2019-01-02 10:42:28.910它将返回2019-01-02 10:30:00.000等等。

你能帮我吗?

标签: tsqlsql-server-2012

解决方案


一种方法是使用模运算符在除以 30 时减去余数:

DECLARE @StartDate datetime2(0),
        @EndDate datetime2(0);
SET @StartDate = (SELECT DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0));
SET @EndDate = GETDATE();
SELECT DATEADD(MINUTE,DATEDIFF(MINUTE, @StartDate, @EndDate) - (DATEDIFF(MINUTE, @StartDate, @EndDate) % 30),@StartDate);

推荐阅读