【问题标题】:TSQL Search Query between two dates两个日期之间的 TSQL 搜索查询
【发布时间】:2015-09-04 21:05:14
【问题描述】:

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

问题出在我的WHERE 子句中。我的表中有两个字段。任务开始时的时间戳startTime 和任务完成时的时间戳endTime/ 这两个字段都是Datetime

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

日期逻辑应该如下:

StartTime>= @startDate< @endDateEndTime<=@endDate 但 > @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');

【问题讨论】:

  • 抱歉,我们帮不上忙。也许下次吧。

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


【解决方案1】:

不应该这么简单吗:

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

【讨论】:

  • @startDate &lt; @endDate AND @endDate &gt; @startDate?冗余,不是吗?
【解决方案2】:

或者,稍微短一点:

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

【讨论】:

    【解决方案3】:

    假设“好”数据,即任务总是在开始后结束并且用户提供的范围有效:

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

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

    请注意,一个常见问题是尝试在一对日期之间查找日期/时间值。要包含最后一天的所有时间,需要在 @EndDate 中添加一天并从比较中删除相等性。

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2023-04-08
      相关资源
      最近更新 更多