过滤日期是否在开始日期和结束日期之间?

时间:2013-10-08 14:56:55

标签: sql sql-server

我有一个datetime列,我想在两个开始日期和结束日期参数上进行过滤。但是,如果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列是日期时间对象,但参数仅为日期。

2 个答案:

答案 0 :(得分:4)

由于2013-10-08 12:35:40.000大于2013-10-08,您必须使用类似

的内容
where ua.actiondate >= '2013-10-08' and ua.actiondate  < '2013-10-09'

答案 1 :(得分:4)

您应该always use an open-ended date rangenever use 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));