0

我有一个带有代表季度和年份的文本参数的报告。例如,“1Q11”代表 2011 年第一季度,“2Q13”代表 2013 年第二季度,以此类推。我也有使用这种格式“QuarterYear”的字段的记录。

问题是,我需要将其合并到报告中,以便仅在季度和年份介于参数中指定的数据之间时才显示数据。例如,如果用户选择“1Q12”和“4Q12”,则报表应显示 QuarterYear 值为“1Q12”、“2Q12”、“3Q12”和“4Q12”的所有记录。如果用户选择“1Q12”和“2Q13”,则报表应显示 QuarterYear 值为“1Q12”、“2Q12”、“3Q12”、“4Q12”、“1Q13”和“2Q13”的记录。

这对我来说很难,因为这些不是日期值,所以我不能使用简单的 BETWEEN。有什么建议么?

4

3 回答 3

1

您是否尝试过将 1Q12 解析为一个日期,在这种情况下,该日期将变为 01/01/2012,结束日期为 31/03/2012?

当您选择 1Q12 到 3Q12 等范围时,请选择 2012 年 1 月 1 日到 2012 年 9 月 30 日之间的报告。

否则(我会说不是推荐的解决方案),您可以编写一个简单的函数,该函数可以循环运行以查找给定范围之间的所有四分之一。并执行诸如递增月份之类的操作(逐月递增 12,并将月份重置为 1)并继续进行直到达到范围的末尾。

于 2012-11-13T16:02:42.540 回答
1

对于一个相对较小的表,最简单的方法可能是使用字符串切片 - 所以你的条件是这样的:

where ...
right(table_quarter,2)+left(table_quarter,1) >= right(@start,2) + left(@start,1) and
right(table_quarter,2)+left(table_quarter,1) <= right(@end,2) + left(@end,1) 
...

请注意,此条件是不可分割的,即。无法在表的季度列上使用任何索引。

于 2012-11-13T16:10:48.337 回答
1

如果您可以控制字符串数据的格式,则应考虑将其转换为 12Q3 而不是 3Q12 之类的格式,这样可以轻松BETWEEN工作。如果您无法控制该特定字段的格式,另一种选择可能是在原始字段的基础上以这种格式将计算字段添加到表中。=right(QuarterYear,2)+'Q'+left(QuarterYear,1)

在这两种情况下,您都可以索引字段以优化BETWEEN. 如果这些都不是可用的选项,那么 Mark Ba​​nnister 的解决方案可能是最好的。

于 2012-11-13T18:21:05.197 回答