【发布时间】:2017-02-15 00:00:26
【问题描述】:
我有一个包含报告年和报告月列的表。对于报告年,该列是一个 vharchar (4),等于 2016 年格式。对于 reportmonth,它是具有 01、02、03 等格式的 varchar (2)。我有一个将两者连接起来的数据参数,因为我们的最终用户想要一个下拉日期。所以我的参数是@ReportDate varchar (7)。
我的问题是我的存储过程中的一个选择,我需要在它返回一个月的地方放置一个 where 子句。因此,如果我的参数等于“2016-11”,我想要一个返回“2016-10”的 where 子句。我已经使用流动查询成功地做到了这一点:
SUBSTRING(@Reportdate, 1, 4) + '-' + cast(substring(@ReportDate, 6, 7) -1 as varchar(20))
如果我选择“2016-11”作为任何报告日期参数,这将返回“2016-10”。 但经过进一步思考,如果我的报告日期是在一月份,这将不起作用,因为上述查询只是从字面上减去一个字符串值。因此,如果我选择“2016-01”,上述查询将返回“2016-0”。
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql ssms