int型の「年月」に対して加減する


















ID計上年月
1201205
2201206



のように、年月をint型で作成した列にたいして、加算・減算を行いたい


↓1行でかいてみる



CAST(SUBSTRING(CONVERT(varchar(12),DATEADD(MONTH,@interval,CAST(CAST(@ym AS varchar(6))+ '01' AS DATE)),112),1,6) AS int)

↓わかりづらいので分解してみる



CDECLARE @ym AS int = 201206;

DECLARE @interval AS int = -6

DECLARE @ymd_before AS DATE = CAST(CAST(@ym AS varchar(6))+ '01' AS DATE);

DECLARE @ymd_after AS DATE = DATEADD(MONTH,@interval,@ymd_before);

SELECT CAST(SUBSTRING(CONVERT(varchar(12),@ymd_after,112),1,6) AS int);


※@ymが対象の計上年月,@intervalが加減する月数。関数として使おうかと思ってこのつくりです。