我有一个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列是日期时间对象,但参数仅为日期。
答案 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 range和never 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));