如何以日期时间数据类型获取今天的最后日期?

cgs*_*ari 1 sql-server-2005 sql-server-2008 sql-server t-sql datetime

选择 dateadd(s, -1, dateadd(month, datediff(month, 0, getdate())+1,0))

当我执行此查询时,它给出了“2012-01-30 23:59:59.000”。我不知道如何将其设为“2012-01-30 23:59:59.997”。如果有人知道,请说。

感谢您!!!

Aar*_*and 7

为什么你需要今天的最后一个可能的价值?停止使用BETWEEN;使用开放式范围更容易(并且更可靠,并且在各种日期/时间数据类型中保持一致):

DECLARE @today SMALLDATETIME;

SET @today = DATEADD(DAY, DATEDIFF(DAY, '20000101', GETDATE()), '20000101');

SELECT ... FROM ...
WHERE date_column >= @today
AND date_column < DATEADD(DAY, 1, @today);
Run Code Online (Sandbox Code Playgroud)

你正在做的问题是数据类型会影响发生的事情。如果基础数据类型是SMALLDATETIME,则向上取整;如果基础数据类型是DATETIMEor DATETIME2,则减去一秒不会捕获当天的所有数据。这实际上是我在T-SQL 中最喜欢的幻灯片之一:坏习惯和最佳实践演讲。有关更多详细信息,请阅读以下博客文章: