我有一个针对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才能获得相同的结果?
答案 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