获取两个日期时间的记录

时间:2018-03-02 13:36:57

标签: sql sql-server-2012

我有一个问题,我正在尝试获取特定记录,其中有两个日期可以获得记录。

日期如下:

StartTime: '2018-03-02 09:00:00.000'
EndTime : '2018-03-02 11:00:00.000'

表格如下: enter image description here

从上面的日期我试图得到第5行。 我试过这样:

SELECT *
FROM [data].[EmergencyOrders]
WHERE [Workcenter] = @Workcenter
  AND [StartDatetime] > @StartTime
  AND ISNULL([EndDatetime], GETDATE()) < @StopTime

但似乎无法让它正常工作。

2 个答案:

答案 0 :(得分:1)

如果您想知道包含StartTimeEndTime的记录,那么您可以

WHERE @StartTime BETWEEN  [StartDatetime] AND ISNULL([EndDatetime], GETDATE())
  AND @EndTime BETWEEN  [StartDatetime] AND ISNULL([EndDatetime], GETDATE())

现在我看到的问题是你的数据范围是否与两个范围重叠。在这种情况下,您将有两种状态。为此,我建议您计算重叠范围并选择最后一个。

Determine Whether Two Date Ranges Overlap

SELECT TOP 1 *
FROM [data].[EmergencyOrders]
WHERE [Workcenter] = @Workcenter
WHERE @StartTime <=  ISNULL([EndDatetime], GETDATE()) 
  AND @EndTime >=  [StartDatetime] 
ORDER BY EmergencyID DESC

答案 1 :(得分:1)

我猜你想要获得那些与你的日期范围相交的记录,这意味着你需要类似下面的SQL:

SELECT *
FROM [data].[EmergencyOrders]
WHERE
    [Workcenter] = @Workcenter AND
    (([StartDatetime] BETWEEN @StartTime AND @StopTime) OR
     (ISNULL([EndDatetime], GETDATE()) BETWEEN @StartTime AND @StopTime)