0

所以我有一个正在工作的存储过程,除了它如何计算某个字段。在使用的表上是一个名为的字段,它的格式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

除非月份是一月,否则这一切都很好,花花公子,因此月份将变为 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陈述不正确,这总是会破坏 Month Ago Date 。我不知道为什么。

谢谢

4

1 回答 1

1

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

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

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

于 2012-12-03T17:28:11.107 回答