2015-09-04 83 views
0

我在計算如何編寫一個看起來非常簡單的查詢時遇到了一些問題。兩個日期之間的TSQL搜索查詢

問題在於我的WHERE子句。我的桌子上有兩個字段。任務開始時的時間戳startTime和任務完成時的時間戳endTime /這兩個字段均爲Datetime

在我的用戶界面中,我允許該人選擇Start DateEnd Date及其過濾選項。

日期邏輯應該如下:

一切其中StartTime>= @startDate< @endDateEndTime<[email protected]是但> @startDate。

我在數據庫中使用單個日期之前已經完成了日期範圍,但不是多個,所以我很困惑。

有什麼想法?

-- 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'); 
+0

對不起,我們忍不住。下次吧。 – HABO

回答

1

它不應該是這麼簡單:

WHERE (StartTime >= @startDate AND @startDate < @endDate) 
AND (EndTime <= @endDate AND @endDate > @startDate) 
+0

'@startDate <@endDate AND @endDate> @ startDate'?冗餘,不是? – HABO

0

或者稍短:

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

假設 「好」 數據的任務,即他們開始後,最終總是和用戶提供的範圍有效:

where startTime >= @StartDate and endTime <= @EndDate 

只要這是真的,那麼任務時間跨度必須包含在用戶指定的範圍內。

請注意,一個常見問題是試圖找到一對日期之間的日期/時間值。要在最後一天包括所有時間,有必要將一天添加到@EndDate,並從比較中刪除平等。