Sql server 为什么可以';我不能在ssrs中使用日期时间参数吗?

Sql server 为什么可以';我不能在ssrs中使用日期时间参数吗?,sql-server,datetime,reporting-services,ssrs-2012,Sql Server,Datetime,Reporting Services,Ssrs 2012,我有一个SSRS日期/时间参数,该参数是根据SQL Server日期时间字段的共享数据集查询生成的。该参数在报表文本框中正确显示,但在嵌入式数据集查询中不起作用,即使在生成日期时间值的同一个表中也是如此 为了将参数用于数据集查询,我必须解析where子句的两侧,以使其在SSDT的预览中工作: (convert(varchar,invoice.snapshot_datetime,120)) = (convert(varchar,@snapshotdatetime,120)) 这是非常低效的 如何

我有一个SSRS日期/时间参数,该参数是根据SQL Server日期时间字段的共享数据集查询生成的。该参数在报表文本框中正确显示,但在嵌入式数据集查询中不起作用,即使在生成日期时间值的同一个表中也是如此

为了将参数用于数据集查询,我必须解析where子句的两侧,以使其在SSDT的预览中工作:

(convert(varchar,invoice.snapshot_datetime,120)) = (convert(varchar,@snapshotdatetime,120))
这是非常低效的

如何在不分析invoice.snapshot\u datetime列的情况下使where子句工作

服务器详细信息

  • SQL Server语言为英语(美国)
  • SQL Server
    dateformat
    mdy
    (来自
    dbcc-useroptions
  • Getdate()
    在SSMS中返回
    '2015-05-20 10:27:56.687'

假设您的日期范围在1900-01-01和2079-06-06之间,您可以强制转换以截断
datetime
变量中的秒数:

DECLARE @DateTime datetime
SET @DateTime = CAST(CAST(@snapshotdatetime as SmallDateTime) as DateTime)
(感谢您的支持)

现在,由于您的实际列是类型,它会保留秒(和毫秒),您还需要消除它们。
但是,在列上使用函数将阻止SQL Server使用此列上的任何索引,因此更好的方法是使用
DateTime
范围:

DECLARE @FromDateTime datetime, @ToDateTime datetime
SET @FromDateTime = CAST(CAST(@snapshotdatetime as SmallDateTime) as DateTime)
因为演员们会将小约会时间的分钟数四舍五入,如果超过29.998秒,则上升;如果低于29.999秒,则下降。您总是希望向下取整,因为它是从datetime开始的,如果您需要减少一分钟,则需要选中:

IF datepart(second, @snapshotdatetime) > 29 
OR (datepart(second, @snapshotdatetime) = 29 
    AND datepart(millisecond, @snapshotdatetime) > 998)
SET @FromDateTime = DATEADD(minute, -1, @FromDateTime)

SET @ToDateTime = DATEADD(minute, 1, @FromDateTime)
然后,在where子句中,使用以下内容:

invoice.snapshot_datetime <= @FromDateTime 
AND invoice.snapshot_datetime >= @ToDateTime
invoice.snapshot\u datetime=@ToDateTime

如果您尚未找到解决方案,请尝试以下方法:

select (convert(varchar,GETDATE(),112))

如果列和变量的数据类型相同,则返回20180206(yyymmdd)

,你为什么要转换它们呢?我已经用DateTime参数创建了一个报告,它可以获取我想要的数据,可能你这边还有其他问题。请不要用单引号传递参数值。@ZoharPeled-如果我不转换,那么两边都不会equate@ArunGairola-我的参数已创建来自共享数据集。我已经更新了问题。传递参数时不带引号。所需的时间分辨率是多少?您需要精确的秒、分钟、小时还是日期?谢谢,这是我们要求的。这将有助于提高性能。但是我更喜欢使用EQUALS运算符。在…和之间使用
的目的是得到最小的结果。使用
=
将强制您像现在一样转换列,或者使用包括毫秒在内的精确时间。你不能既吃了蛋糕又把它留着……也许这就是问题的核心?SSRS日期/时间参数不包含毫秒