0

我有一个日期时间列,我想过滤两个开始日期和结束日期参数。但是,如果 startd ate 和 end date 是相同的值,则不会返回任何行。

ua.actiondate < '2013-10-08' and ua.actiondate  > '2013-10-08'

ua.actiondate between '2013-10-08' and '2013-10-08'

我的 actionDate 列的示例值

2013-10-08 12:30:17.000
2013-10-08 12:30:17.000
2013-10-08 12:31:56.000
2013-10-08 12:32:22.000
2013-10-08 12:35:35.000
2013-10-08 12:35:40.000
2013-10-08 12:35:40.000
2013-10-08 12:36:03.000
2013-10-08 12:36:44.000
2013-10-08 12:36:44.000
2013-10-08 12:36:54.000

如您所见,actionDate 列是日期时间对象,但参数只是日期。

4

2 回答 2

4

您应该始终使用开放式日期范围,并且永远不要使用 between

WHERE ua.actiondate >= @startdate AND ua.actiondate < DATEADD(DAY, 1, @enddate);

这假定@startdate并且@enddate总是作为没有时间的日期传递。如果涉及时间(例如应用程序可能会通过now()),那么您可以使用以下方法四舍五入:

WHERE ua.actiondate >= CONVERT(DATE, @startdate)
  AND ua.actiondate <  CONVERT(DATE, DATEADD(DAY, 1, @enddate));
于 2013-10-08T15:00:23.293 回答
4

因为2013-10-08 12:35:40.000大于2013-10-08你必须使用这样的东西

where ua.actiondate >= '2013-10-08' and ua.actiondate  < '2013-10-09'
于 2013-10-08T14:58:06.473 回答