两个日期之间的TSQL搜索查询

时间:2015-09-04 21:05:14

标签: sql-server tsql stored-procedures sql-server-2012

我在弄清楚如何编写一个看起来很简单的查询时遇到了一些麻烦。

问题出在我的WHERE条款中。我的桌子上有两个字段。任务开始时的时间戳startTime以及任务完成时间的时间戳endTime /这两个字段均为Datetime

在我的界别中,我允许此人选择Start DateEnd Date及其过滤选项。

日期逻辑应如下:

StartTime>= @startDate< @endDateEndTime<=@endDate的所有内容均为-- Fetch our data SELECT [recordID], [ItemID], [QID], [NTID], [EmpID], [FirstName], [LastName], [SupQID], [SupEmpID], [SupFirstName], [SupLastName], [Location], [Department], [Skillset], [BudgetMarket], CONVERT (VARCHAR (20), [startTime], 100) AS startTime, CONVERT (VARCHAR (20), [endTime], 100) AS endTime, COALESCE (DATEDIFF(SECOND, startTime, endTime), 0) AS totalTimeSeconds FROM itemTracker_records WHERE (@employee IS NULL OR (QID = @employee)) AND (@supervisor IS NULL OR (supQID = @supervisor)) AND CAST(endTime as Date) >= @startDate AND CAST(endTime as Date) < @endDate FOR XML PATH ('results'), TYPE, ELEMENTS, ROOT ('root'); ,但&gt; @startDate。

我在使用数据库中的单个日期之前已经完成了日期范围,但没有多个,所以我很困惑。

有什么想法吗?

type

3 个答案:

答案 0 :(得分:1)

不应该像以下一样简单:

<item>

答案 1 :(得分:0)

或者,稍短:

WHERE StartTime between @startDate AND @endDate 
  AND  EndTime  between @startDate AND @endDate

答案 2 :(得分:0)

假设&#34;好&#34;数据,即任务总是在它们启动后结束,并且用户提供的范围有效:

HttpSession

只要这是真的,那么任务时间跨度必须包含在用户指定的范围内。

请注意,常见问题是尝试在一对日期之间查找日期/时间值。要包括最后一天的所有时间,有必要将一天添加到where startTime >= @StartDate and endTime <= @EndDate 并从比较中删除相等。