0

したがって、特定のフィールドを計算する方法を除いて、機能しているストアドプロシージャがあります。使用されるテーブルには、DeliveryYearMonth単純YYYYMMにその形式であると呼ばれるフィールドがあります。今月の情報と前月の情報を比較しようとしているので、次の2つの変数を作成しました。

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)場合でも、常に1か月前の日付を破ります。IF理由がわかりません。

ありがとう

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 に答える