如果我使用此查询,它的工作原因是日期相同:
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,但还有什么可以用来使这项工作?
答案 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 演示
推荐阅读: