我们有一个要求,我们需要在SQL Server中比较日期和时间,以在该时间间隔中获取特定的记录。
下面是我正在尝试且未获得预期结果的示例代码-
SELECT [VESSEL_ID], [PARTY_ID], [LAST_UPDATE_DATE]
FROM [dbo].[VS_VESSEL_PARTY_DETAILS]
WHERE [VESSEL_ID] = 19125 AND LAST_UPDATE_DATE >= Convert(datetime, '2018-12-17 13:21:02.710') AND LAST_UPDATE_DATE <= Convert(datetime, '2018-12-17 18:21:02.710') AND [END_DATE] IS NULL ORDER BY LAST_UPDATE_DATE DESC
在上面的示例中,我希望在特定时间间隔内获取所有记录。
有人可以帮助我更正此查询或提出更好的解决方案吗?
非常感谢 -相同
答案 0 :(得分:0)
尝试一下。之间应该有所帮助,并在括号内全部使用。
SELECT [VESSEL_ID], [PARTY_ID], [LAST_UPDATE_DATE]
FROM [dbo].[VS_VESSEL_PARTY_DETAILS]
WHERE [VESSEL_ID] = 19125
AND LAST_UPDATE_DATE between( Convert(datetime, '2018-12-17 13:21:02.710')
AND Convert(datetime, '2018-12-17 18:21:02.710') )
AND [END_DATE] IS NULL ORDER BY LAST_UPDATE_DATE DESC
答案 1 :(得分:0)
这是您的查询:
SELECT [VESSEL_ID], [PARTY_ID], [LAST_UPDATE_DATE]
FROM [dbo].[VS_VESSEL_PARTY_DETAILS]
WHERE [VESSEL_ID] = 19125 AND
LAST_UPDATE_DATE >= Convert(datetime, '2018-12-17 13:21:02.710') AND
LAST_UPDATE_DATE <= Convert(datetime, '2018-12-17 18:21:02.710') AND
[END_DATE] IS NULL
ORDER BY LAST_UPDATE_DATE DESC;
查询没有问题。如果您没有收到任何行,则没有行与WHERE
子句中的条件匹配。
答案 2 :(得分:0)
当您将LAST_UPDATE_DATE与less_than_or_equal进行比较,并同时将great_than_or_equal与相同的值进行比较时,最终它等同于简单的equal。
因此,您的声明应遵循以下条件:
SELECT [VESSEL_ID], [PARTY_ID], [LAST_UPDATE_DATE]
FROM [dbo].[VS_VESSEL_PARTY_DETAILS]
WHERE [VESSEL_ID] = 19125 AND LAST_UPDATE_DATE = Convert(datetime, '2018-12-17 13:21:02.710')
ORDER BY LAST_UPDATE_DATE DESC
但是,由于您可能不知道精确到毫秒的确切时间,因此您可能需要使用一系列不同的值(略有不同)。
DECLARE @DateFrom DATETIME = Convert(datetime, '2018-12-17 13:21:02.700')
DECLARE @DateTo DATETIME = Convert(datetime, '2018-12-17 13:21:02.720')
-- note that above times are 20ms apart
SELECT [VESSEL_ID], [PARTY_ID], [LAST_UPDATE_DATE]
FROM [dbo].[VS_VESSEL_PARTY_DETAILS]
WHERE [VESSEL_ID] = 19125 AND LAST_UPDATE_DATE BETWEEN @DayFrom AND @DayTo
ORDER BY LAST_UPDATE_DATE DESC
顺便说一句,最好从SELECT语句中取出任何静态值计算,因此它不会在每一行上进行计算。