SQL Server:使DATETIME持续30分钟

时间:2019-01-02 10:34:53

标签: tsql sql-server-2012

我有一个小的存储过程(在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,然后等等。

你能帮忙吗?

2 个答案:

答案 0 :(得分:1)

一种方法是使用模运算符除以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);

答案 1 :(得分:1)

使用 DATETIMEFROMPARTS 设置结束日期,您只需要一些基本逻辑即可随意创建数据。

类似:

.......

DECLARE @minute int 
set @minute = --insert your logic here
SET @endDate = DATETIMEFROMPARTS ( @year, @month, @day, @hour, @minute, 0, 0 )  

这里有一些ref