如何获得SSRS中两个日期变量之间的差异

时间:2014-01-27 18:54:44

标签: sql date datetime reporting-services

如果我使用此查询,它的工作原因是日期相同:

    DECLARE @Start datetime
    DECLARE @End datetime
    DECLARE @ServerName varchar(128)
    SET @Start = '2014-01-24'
    SET @End = '2014-01-24'
    SET @ServerName = 'ServerName'

    SELECT ServerName, cntr_value, collection_datetime
     FROM PLE
     WHERE CONVERT(DATE, collection_datetime) = @Start 
     AND CONVERT(DATE, collection_datetime) = @End 
     AND ServerName = @ServerName

但是,我想使用@Start和@End作为SSRS参数,因此我需要查看指定日期范围内的数据,所以我认为我会使用类似下面的内容......除非它不起作用。< / p>

     DECLARE @Start datetime
     DECLARE @End datetime
     DECLARE @ServerName varchar(128)
     SET @Start = '2014-01-24'
     SET @End = '2014-01-27'
     SET @ServerName = 'Server'


    SELECT ServerName, cntr_value, collection_datetime
     FROM PLE
     WHERE CONVERT(DATE, collection_datetime) = @Start 
     BETWEEN CONVERT(DATE, collection_datetime) = @End 
     AND ServerName = @ServerName

显然我不能使用BETWEEN,但还有什么可以用来使这项工作?

1 个答案:

答案 0 :(得分:1)

索引友好方式执行

SELECT ServerName, cntr_value, collection_datetime
  FROM PLE
 WHERE collection_datetime >= @Start 
   AND collection_datetime <  DATEADD(DAY, 1, @End)
   AND ServerName = @ServerName

注意:当您将函数应用于WHERE子句中的列时,会阻止数据库引擎使用您可能拥有的任何索引(索引)(并且您最好这样做)列有效地导致完整扫描。

这是 SQLFiddle 演示

推荐阅读: