比较SQL Server中的日期(包括时间)

时间:2018-12-26 19:49:20

标签: sql sql-server

我们有一个要求,我们需要在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

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

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

非常感谢 -相同

3 个答案:

答案 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语句中取出任何静态值计算,因此它不会在每一行上进行计算。