我在弄清楚如何编写一个看起来很简单的查询时遇到了一些麻烦。
问题出在我的WHERE
条款中。我的桌子上有两个字段。任务开始时的时间戳startTime
以及任务完成时间的时间戳endTime
/这两个字段均为Datetime
。
在我的界别中,我允许此人选择Start Date
和End Date
及其过滤选项。
日期逻辑应如下:
StartTime
为>= @startDate
但< @endDate
而EndTime
为<=@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
答案 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
并从比较中删除相等。