sql-server - 舍入时间为 5 分钟最接近的 SQL Server

标签 sql-server tsql

我不知道它对某人是否有用,但我疯狂地寻找解决方案,最终自己做了。这是一个函数(根据作为参数传递的日期),返回相同的日期和最接近的 5 倍数的近似时间。这是一个缓慢的查询,所以如果有人有更好的解决方案,欢迎。一句问候。

CREATE FUNCTION [dbo].[RoundTime] (@Time DATETIME) RETURNS DATETIME
AS
BEGIN
DECLARE @min nvarchar(50)
DECLARE @val int
DECLARE @hour int
DECLARE @temp int
DECLARE @day datetime
DECLARE @date datetime

SET @date = CONVERT(DATETIME, @Time, 120)

SET @day = (select DATEADD(dd, 0, DATEDIFF(dd, 0, @date)))
SET @hour = (select datepart(hour,@date))
SET @min = (select datepart(minute,@date))

IF LEN(@min) > 1
BEGIN
    SET @val = CAST(substring(@min, 2, 1) as int)
END
else
BEGIN
    SET @val = CAST(substring(@min, 1, 1) as int)
END

IF @val <= 2
BEGIN
    SET @val = CAST(CAST(@min as int) - @val as int)
END
else
BEGIN
    IF (@val <> 5)
    BEGIN
        SET @temp = 5 - CAST(@min%5 as int)
        SET @val = CAST(CAST(@min as int) + @temp as int)
    END

    IF (@val = 60)
    BEGIN
        SET @val = 0
        SET @hour = @hour + 1
    END

    IF (@hour = 24)
    BEGIN
        SET @day = DATEADD(day,1,@day)
        SET @hour = 0
        SET @min = 0
    END
END

RETURN CONVERT(datetime, CAST(DATEPART(YYYY, @day) as nvarchar) + '-' +  CAST(DATEPART(MM, @day) as nvarchar) + '-' + 
CAST(DATEPART(dd, @day) as nvarchar) + ' ' + CAST(@hour as nvarchar) + ':' +     CAST(@val as nvarchar), 120)

结束

最佳答案

您可以计算自纪元以来的分钟数:

datediff(minute,0,getdate())

除以整数 15,四舍五入为 15 分钟:

datediff(minute,0,getdate()) / 15 * 15

并将纪元添加回来:

dateadd(minute, datediff(minute,0,getdate()) / 15 * 15, 0)

例如:

select  dateadd(minute, datediff(minute,0,getdate()) / 15 * 15, 0)
-->
2013-11-12 10:45:00.000

关于sql-server - 舍入时间为 5 分钟最接近的 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19925476/

相关文章:

PHP 超时运行 MSSQL SP

sql-server - SQL Server Management Studio 中的提交和回滚按钮在哪里?

php - 当 WHERE 存在时 SQL Server 更新

sql - 将数据类型 nvarchar 转换为 int 时出错

sql-server - SQL Server 查询 - 如何将选定的值插入到另一个表中

c# - 获取属性的值

sql-server - 跨多个利率计算利息

sql - 定义范围以覆盖数字序列中的间隙 (T-SQL)

tsql - 如何翻转 SQL 中的随机位

c# - 如何限制我的sql数据库中的行数,然后在达到限制时覆盖行?