SQL if语句返回错误

时间:2012-12-03 17:21:57

标签: sql sql-server stored-procedures if-statement

所以我有一个正在运行的存储过程,除了它如何计算某个字段。在使用的表上有一个名为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。我无法弄清楚原因。

由于

1 个答案:

答案 0 :(得分:1)

要获取字符串的先前版本,您可以执行以下操作:

select replace(convert(varchar(7), dateadd(month, -1, CAST(@CURDate+'01' as DATE)), 121), '-', '')

正如评论建议的那样,您应该将此存储为日期,假设您使用的是SQL Server 2008或更新版本。