我已经盯着这一段很长一段时间了,无法弄清楚如何去做。我真的没有任何代码可以发布,因为我还没有接近搞清楚,我提出的所有内容都没有任何意义。
无论如何,我们有一个应用程序,它根据表中的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
答案 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)