所以我有一个正在运行的存储过程,除了它如何计算某个字段。在使用的表上有一个名为DeliveryYearMonth
的字段,其格式只是YYYYMM
。我尝试将当前月份信息与上个月信息进行比较,因此我创建了以下两个变量。
DECLARE @CURDate VARCHAR(50) -- Current time (YYYYMM)
DECLARE @MAGDate VARCHAR(50) -- YearAgo Time (YYYYMM)
SET @CURDate = cast((select max(DeliveryYearMonth) from dbo.datatable) as varchar)
SET @MAGDate = cast((substring(@CURDate,1,4)) as varchar) --For current year
+ cast((substring(@CURDate,5,2) - 1) as varchar) -- To get previous month
除非月份是1月,否则这一切都很好,因此月份将变为00,年份将保持不变。
所以我尝试用if语句清除它。
if(substring(@MAGDate,5,2)) = '00'-- If current Month is January
begin
Set @MAGDate = cast((substring(@CURDate,1,4) - 1) as varchar) --For previous year
+ '12' -- December
end
即使(@MAGDate)
声明不正确,也始终会打破月份日期IF
。我无法弄清楚原因。
由于
答案 0 :(得分:1)
要获取字符串的先前版本,您可以执行以下操作:
select replace(convert(varchar(7), dateadd(month, -1, CAST(@CURDate+'01' as DATE)), 121), '-', '')
正如评论建议的那样,您应该将此存储为日期,假设您使用的是SQL Server 2008或更新版本。