2012-12-03 227 views
0

所以我有一個存儲的過程,除了它如何計算某個字段的工作。在處理的表格中有一個名爲DeliveryYearMonth的字段,其格式爲YYYYMM。我嘗試將當前的月份信息與上個月的信息進行比較,因此我創建了以下兩個變量。SQL如果語句返回不正確

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說法是不正確的。我無法弄清楚爲什麼。

感謝

+5

爲什麼地球上不能只使用'DATE'類型?我會停止一切並立即轉換。 – Kermit

+0

您使用的是什麼RDBMS?看起來像SQL Server。 –

+0

爲什麼使用'CAST'將字符串轉換爲字符串? – Barmar

回答

1

爲了讓您的字符串的以前的版本,你可以做到以下幾點:

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

正如評論所說,但是,你真的應該只儲存這個作爲一個日期,假設你正在使用SQL Server 2008或更新版本。

+0

做了第二部分。謝謝。 – JHStarner