我试图在SQL Server 2005下编写一个用户定义的函数,该函数会将字母数字值的整数部分加1。例如,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是显而易见的答案,但是您可以处理额外的数字吗?) – 2009-06-12 14:58:37
达到限制时额外的数字是正确的。在这种情况下,A100就是我的GUI界面所做的 - 我需要在UDF下进行这项工作,因为我正在编写一个将追加数据的触发器。 – 2009-06-12 15:01:26
alpha部分是否总是一个字符或者函数是否必须处理更多(例如'AB001'=>'AB002')? – Joe 2009-06-12 15:12:56