ssrs日期参数

时间:2019-05-01 11:38:58

标签: sql sql-server date reporting-services parameters

我有一个针对SSRS报告的SQL查询,以返回在两个日期之间创建记录的结果,我使用的参数与日期值相同

select * from results
where [startdate] >=@datestart or [startdate] <=@dateend

当我运行SSRS报告并为@startdate和@enddate选择相同的日期时,我收到了2条我知道不正确的记录。当我运行SQL查询并使用日期例如'01 feb 2019'而不是参数时,会得到不同的结果。如果我使用的是实际日期,是否需要从参数中排除时间或将@startdate的时间设置为00:00:00并将@dateend的时间设置为23:59:59才能获得相同的结果?

3 个答案:

答案 0 :(得分:1)

如果您的SSRS参数为 private fun getViewEventType1(): String? { return if (intent.action == "android.intent.action.VIEW") { intent.data?.pathSegments?.let { if (it.size == 3 && it[0] == "app" && it[1] == "event") it[2] else null } } else null } private fun getViewEventType2(): String? { return valueIf(intent.action == "android.intent.action.VIEW") { intent.data?.pathSegments?.let { valueIf(it.size == 3 && it[0] == "app" && it[1] == "event") { it[2] } } } } inline fun <T> valueIf(condition: Boolean, func: () -> T?) = if (condition) func() else null 值,而数据为date值,最简单的解决方案是在datetime上添加一天,然后查找任何@dateend值在之前但不等于

使用datetime代替<很重要,因为时间是无限的。在您将<=值更改为附加@enddate的示例中,在23:59:59和一天结束之间的所有datetime值(例如23:59:59)将不包括在内。

这样,您可以像下面这样构造脚本:

23:59:59.5

答案 1 :(得分:0)

您应该仅将datetime截断为日期。

select * from results
  where cast(startdate As Date) >= @datestart
    and cast(startdate As Date) <= @dateend

答案 2 :(得分:0)

@imadave的解决方案将完美运行。

此外,您可以只使用“ BETWEEN”子句来获取结果。它将返回给定范围(含)之间的所有日期。如果未指定时间部分,则默认为上午12:00。

SELECT * FROM results 
WHERE [startdate] BETWEEN @datestart AND @dateend