【发布时间】:2018-10-11 16:40:51
【问题描述】:
我在数据库表中有两个日期时间列:@Start 和 @End。
两列都包含日期和时间,例如:
@Start: 2018-10-01 19:00:00
@End: 2018-10-10 23:59:00
我想知道当前日期是否正好在考虑日期和时间的两个日期时间之间。
所以,2018-10-08 16:37 和 2018-10-10 23:59:00 将匹配此范围
而2018-10-11 00:00:00 不会。
(在这种情况下,这个日期比结束日期晚一分钟,所以它不在我的日期时间范围内)。
SELECT Id FROM Table1 WHERE GETDATE() BETWEEN Start AND End
我不在实际代码中使用 GETDATE(),而是使用参数。问题是当前日期参数可能包含秒和毫秒,如23:59:59.123。我的代码将此类日期视为不符合给定范围。但我不在乎 s/ms。
有解决办法吗?
更新:
我想要达到的精确度是分钟。所以我什至不需要考虑秒数和毫秒数。我将使用的日期时间格式是“yyyy-MM-dd hh-mm”,但我不知道如何使用 BETWEEN 子句将 Start 和 End 转换为所示格式,以便比较日期。
【问题讨论】:
-
您的代码应该可以在任何版本的 SQL Server 中工作。
-
如果 getdate() 完全
2018-10-10 23:59:00到最后一个毫秒会怎样? -
这里 在您的查询中 -
GetDate()始终返回当前日期时间。但是为了从您的表中获取记录,请使用您的表列而不是GetDate()。 -
Between 真的很糟糕,尤其是在日期时间检查方面。这是关于该主题的精彩讨论。 sqlblog.org/2011/10/19/…
-
@asaf 你的查询很完美。唯一可能的问题是当变量的数据类型是
datetime并且您尝试推送一个毫秒值,例如00:00:00.001或00:00:00.002。这些值会四舍五入,最终得到00:00:00.000或00:00:00.003。
标签: sql sql-server datetime