Я пытаюсь закодировать пользовательскую функцию в SQL Server 2005, которая увеличит целочисленную часть буквенно-цифрового значения на единицу. Например, uf_AlphanumericIncrease ('A000299')
должен возвращать «A000300». Вот что я сделал до сих пор;Увеличение буквенно-цифрового значения в пользовательской функции
ALTER FUNCTION uf_AlphaNumericIncrement
(
@ID varchar(10)
)
RETURNS VARCHAR(10) AS
BEGIN
DECLARE @RES varchar(10);
IF SUBSTRING(@ID,LEN(@ID),1)='9'
SET @RES=SUBSTRING(@ID,1,LEN(@ID)-2)+CAST (CAST(SUBSTRING(@ID,LEN(@ID)-1,1) AS smallint)+1 AS VARCHAR(10))+'0';
ELSE
SET @RES=SUBSTRING(@ID,1,LEN(@ID)-1)+CAST (CAST(SUBSTRING(@ID,LEN(@ID),1) AS smallint)+1 AS VARCHAR(10));
RETURN @RES;
END
Но, как вы можете видеть, это работает только для последней цифры. Мне нужно получить его в цикле, чтобы он мог работать на A002999 и так далее. Есть идеи?
Редактировать: данное значение может иметь альфа-префикс длиннее одного символа или вообще отсутствует.
у меня нет никакого решения для вас, но мне любопытно, и это может помочь тем, отвечая на ваш вопрос, к чему вы хотели бы увеличить A99. (A100 - очевидный ответ, но можете ли вы иметь дело с дополнительной цифрой?) –
Дополнительная цифра в порядке, когда предел достигнут. В этом случае A100 - это то, что делает мой интерфейс GUI - мне нужно это под UDF, потому что я кодирую триггер, который будет добавлять данные. –
Является ли альфа-часть всегда одним символом или функция должна обрабатывать больше (например, «AB001» => «AB002»)? – Joe