【发布时间】:2014-07-17 12:39:43
【问题描述】:
我有一列时间,想创建第二列来显示他们在 24 小时制时钟上属于哪个 5 分钟间隔。例如
15:19:52 becomes 15:15:00
15:20:11 becomes 15:20:00
【问题讨论】:
标签: sql sql-server-2012
我有一列时间,想创建第二列来显示他们在 24 小时制时钟上属于哪个 5 分钟间隔。例如
15:19:52 becomes 15:15:00
15:20:11 becomes 15:20:00
【问题讨论】:
标签: sql sql-server-2012
您可以执行以下操作。它建立了时间
SELECT TIMEFROMPARTS(
DATEPART(HOUR, yourTimeField),
DATEPART(MINUTE, yourTimeField) / 5 * 5, 0,
0,
0)
FROM yourTable
【讨论】:
TIMEFROMPARTS(我也有),但你可以像SELECT CAST(DATEPART(HOUR, yourTimeField) as CHAR(2))+':'+ CAST((DATEPART(MINUTE, yourTimeField) / 5 * 5) as CHAR(2))+':00' as TimeIntervalFive FROM times 那样即兴发挥
我发现一个线程可以帮助您开始使用它。
T-SQL: Round to nearest 15 minute interval
但是,这里的所有示例似乎都只是四舍五入,因此您需要从结果中减去 5 才能得到您想要的结果。
【讨论】:
另一个简化的解决方案是创建时间线并找到您的确切位置:
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
【讨论】: