比较日期,包括 SQL Server 中的“时间”部分



我们有一个要求,我们需要比较日期和SQL服务器中的时间,以在该时间间隔内获取特定记录。

下面是我正在尝试但没有得到预期结果的示例代码 -

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

在上面的示例中,我希望在特定时间间隔内获取所有记录。

有人可以帮助我更正此查询或提出更好的解决方案吗?

谢谢-Sameer

试试这个。之间应该有帮助,都在括号里。

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

这是您的查询:

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 子句中的条件匹配。

当您将LAST_UPDATE_DATE与less_than_or_equal进行比较并同时greater_than_or_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 语句中取出任何静态值计算,这样它就不会在每一行上计算它。

最新更新