3

我需要使用查询来根据表中的字段获取一小时的最后一秒。

我已经处理过这个查询,它似乎有效(SQL Server 2008)

SELECT DATEADD(S, -1, DATEADD(hh, 1, dateadd(minute, datediff(minute,0,GETDATE()) / 60 * 60, 0)))

这是解决此问题的最佳方法,还是有更清洁(更具可读性)和更快的方法。我正在考虑速度,因为这将在具有大量字符串处理的表上运行,并且正在尝试优化我可以优化的地方。

编辑:我最初将这个问题的文本和主题发布为“当前时间的最后一分钟”,这是为了阅读“最后一秒”。我的头脑显然已经停止了这一天。为我的错误道歉

4

3 回答 3

5

这个怎么样:

  select convert(char(13),GETDATE(),121)+':59:59.000'


SQL 小提琴演示

于 2012-10-12T11:49:40.527 回答
4

您的查询将为您提供最后一秒而不是一分钟
这是另一种方式。

select dateadd(second, -1, dateadd(hour, 1+datediff(hour, 0, getdate()), 0))

要获得最后一分钟,您可以使用

select dateadd(minute, -1, dateadd(hour, 1+datediff(hour, 0, getdate()), 0))
于 2012-10-12T11:58:26.527 回答
1

实际上,我的想法与 Joe 几乎相同,但我试图找出哪个更快,所以我跑了:

SELECT DATEADD(S, -1, DATEADD(hh, 1, dateadd(minute, datediff(minute,0,GETDATE()) / 60 * 60, 0)))
GO 1000

进而:

select SUBSTRING( convert(varchar(20), GETDATE(),20),1,14)+'59:59'
GO 1000

第一个查询在 44 秒内运行,第二个在 42 秒内运行,因此差别不大。也许如果您尝试查询,它会产生影响,但据我所知,它几乎是一样的

于 2012-10-12T12:03:26.857 回答