我有一个表有列reportyear和reportmonth。对于reportyear,该列是一个vharchar(4),等于2016年格式。对于reportmonth,它是一个具有01,02,03等格式的varchar(2)。由于我们的最终用户需要一个下拉日期,因此我有一个数据参数将两者连接起来。所以我的参数是@ReportDate varchar(7)。从varchar年份和日期参数格式'2016-11'减去月份
我的问题是我的存储过程中的一个选择,我需要把where子句放回去一个月。所以如果我的参数等于'2016-11',我想要一个where子句,它返回'2016-10'。我已经成功地做到了这一点利用流动查询:
SUBSTRING(@Reportdate, 1, 4) + '-' + cast(substring(@ReportDate, 6, 7) -1 as varchar(20))
这将返回“2016-10”如果我选择“2016-11”的任何报告日期参数。 但经过进一步的思考,如果我的报告日期是一月份,这是行不通的,因为上面的查询只是字面上减去一个字符串值。所以如果我选择'2016-01',上面的查询将返回'2016-0'。
最终用户希望SSRS中的下拉参数为破折号,这就是为什么我声明它为varchar(7)以包含破折号@John Cappelletti – Lisbon
@Lisbon我更新了包含破折号,当我看到评论。 varchar(7)vs varchar(10)不是问题 –