TSQL更新DATETIME分钟和秒

时间:2011-08-09 12:54:57

标签: sql sql-server tsql

我已经盯着这一段很长一段时间了,无法弄清楚如何去做。我真的没有任何代码可以发布,因为我还没有接近搞清楚,我提出的所有内容都没有任何意义。

无论如何,我们有一个应用程序,它根据表中的max(读取时间)每5分钟收集一次数据(但如果时间是5的倍数,则只显示实际值,并且是:00.000秒。)大多数情况下,这很好,但有时数据将不同步并在我们的表中产生一堆0值。

目前,我们刚刚进入,抓住最新的阅读时间,并硬编码我们想要使用的新日期。我正在寻找一个可用于自动执行此操作的脚本。出于这个问题的目的,我们可以使用GETDATE()。

DECLARE @readtime DATETIME = GETDATE()  --2011-08-09 08:51:19.237
             -- I want it to look like    2011-08-09 08:50:00.000

3 个答案:

答案 0 :(得分:4)

试试这个。

它基本上将分钟检查为5,秒为6,ms为1000,如果不是,则减去每个分余数:

DECLARE @dt datetime = '2011-08-09 08:51:19.237'

SELECT DATEADD(
                MILLISECOND, 
                -(DATEPART(MILLISECOND, @dt) % 1000), 
                DATEADD(
                        SECOND, 
                        -(DATEPART(second, @dt) % 60), 
                        DATEADD(
                                minute, 
                                -(DATEPART(minute, @dt) % 5), @dt )
                        )
                )

<强>输出:

2011-08-09 08:50:00.000

答案 1 :(得分:3)

向下舍入到最近的5分钟。

DECLARE @readtime DATETIME = 
    DATEADD(minute, 5*FLOOR(DATEDIFF(minute, 0, GETDATE())/5.0), 0)

答案 2 :(得分:0)

你看到了吗?

How to Round a Time in T-SQL

您可以尝试接受答案的RoundTime功能。