在SQL Server中将时间字段分组为5分钟

时间:2014-07-17 12:39:44

标签: sql sql-server-2012

我有一段时间,想要创建第二列,以显示它们落入24小时时钟的5分钟间隔。例如

15:19:52 becomes 15:15:00
15:20:11 becomes 15:20:00

3 个答案:

答案 0 :(得分:5)

您可以执行以下操作。它建立时间

SELECT TIMEFROMPARTS(
         DATEPART(HOUR, yourTimeField),
         DATEPART(MINUTE, yourTimeField) / 5 * 5, 0,
         0,
         0)
FROM yourTable

Link to SQL Fiddle Example

答案 1 :(得分:1)

我发现有一个帖子可以帮助你开始使用它。

T-SQL: Round to nearest 15 minute interval

但是,此处的所有示例似乎都只是向上舍入,因此您需要从结果中减去5才能得到您正在寻找的内容。

答案 2 :(得分:0)

另一种简化的解决方案是创建时间线并找到您的确切位置:

DECLARE @t TABLE (b  TIME)


INSERT INTO @t
VALUES   (  '14:16') ,( '15:19:52') ,('15:20:11')


;
WITH cte AS (
         SELECT CAST ('00:00'AS TIME) AS a
         UNION ALL
         SELECT DATEADD(MINUTE, 5, a) from cte
         WHERE  cte.a   <  CAST ('23:54:00' AS TIME)
     )
SELECT * FROM @t CROSS APPLY(SELECT TOP 1 a FROM cte WHERE  a<=b ORDER BY
       a         DESC) k  option (maxrecursion 0)




b   a
14:16:00.0000000    14:15:00.0000000
15:19:52.0000000    15:15:00.0000000
15:20:11.0000000    15:20:00.0000000