我有一个问题,我正在尝试获取一个特定的记录,我有两个日期来获得记录。
日期如下:
StartTime: '2018-03-02 09:00:00.000'
EndTime : '2018-03-02 11:00:00.000'
从上面的日期我试图获得行号5.我尝试过这样:
SELECT *
FROM [data].[EmergencyOrders]
WHERE [Workcenter] = @Workcenter
AND [StartDatetime] > @StartTime
AND ISNULL([EndDatetime], GETDATE()) < @StopTime
但似乎无法让它正常工作。
如果你想知道包含StartTime
和EndTime
的记录,你就可以了
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
我猜你想得到那些与你的日期范围相交的记录,这意味着你需要类似下面的SQL:
SELECT *
FROM [data].[EmergencyOrders]
WHERE
[Workcenter] = @Workcenter AND
(([StartDatetime] BETWEEN @StartTime AND @StopTime) OR
(ISNULL([EndDatetime], GETDATE()) BETWEEN @StartTime AND @StopTime)