我同意 Mark Byers 的回答是真正的解决方案。只是想添加一个陷阱,在 SQL Server 2008 之前,日期时间精度约为 3.33 毫秒。 Quote from MSDN:
日期时间值四舍五入为
0.000、0.003 或 0.007 的增量
第二个...
所以在日期上加 1ms 并不能解决你的问题。
例如
SELECT DATEADD(ms, 1, '2010-04-12T12:00:00.000') -- outputs time still as x.000s
SELECT DATEADD(ms, 2, '2010-04-12T12:00:00.000') -- output: .003s
SELECT DATEADD(ms, 3, '2010-04-12T12:00:00.000') -- output: .003s
SELECT DATEADD(ms, 4, '2010-04-12T12:00:00.000') -- output: .003s
SELECT DATEADD(ms, 5, '2010-04-12T12:00:00.000') -- output: .007s
SELECT DATEADD(ms, 6, '2010-04-12T12:00:00.000') -- output: .007s
SELECT DATEADD(ms, 7, '2010-04-12T12:00:00.000') -- output: .007s
SELECT DATEADD(ms, 8, '2010-04-12T12:00:00.000') -- output: .007s
SELECT DATEADD(ms, 9, '2010-04-12T12:00:00.000') -- output: .010s
实际上每次都需要增加 3 毫秒。充其量它适用于您的情况,但并不是真正的“干净”解决方案,有点黑客。在最坏的情况下,它只是无法工作/扩展,具体取决于数据量/数据传播的密度。但是,如果您沿着这条路线前进,您应该注意日期时间准确性问题。
SQL Server 2008 确实引入了DATETIME2,其精度为 100ns。请参阅 DaveK 的回答。