DECLARE @AccPD Char(6)
DECLARE @PostMT Char(2)
SELECT @accpd ='201102'
select @PostMT = case when substring(@accpd,5,2) = '01'
then right(substring(@accpd,5,2) + 11, 2)
else right(100 + substring(@accpd,5,2)-1, 2)
end
SELECT @PostMT
Проблема заключалась в том, что когда вы используете
then substring(@accpd,5,2) + 11
в первой ветви оператора CASE, +11 выдает результат INT, что также заставляет 2-ю ветвь стать результатом INT(из 1).Когда результат [INT] затем присваивается переменной @PostMT Char (2), именно в этот момент INT (1) преобразуется в «1» (обратите внимание на пробел из-за char2 фиксированной ширины)