向varchar添加零

时间:2015-04-02 17:57:47

标签: tsql

我有这个脚本,我通过从名字和姓氏中取一些字符来创建一个ID,如果该组合已经存在则添加1。我很确定我很接近,但我的问题是这个。 如果输入一个名字Sully Joan,我需要获得SULJ0002(2因为已经输入了具有该名称的人,下一个人将是SulJ0003)。 我的问题是,当我将数字转换为数字并且添加1后我返回'2'时,将数字返回,我试图设计一种方法来获取'0002'而无需硬编码前三个零。

DECLARE @stid varchar(12)
DECLARE @amt varchar(12) 
DECLARE @tempsid varchar(12) 
DECLARE @newid varchar(12) 
SELECT @stid=SUBSTRING('Sully',1,3)+SUBSTRING('Joan',1,1)+'0'

 set @amt=(SELECT top 1 studentid FROM studentinfo WHERE studentid LIKE
@stid+'%' order by studentid desc)


 IF COUNT(@AMT)=1
 begin

 Set @tempsid = (select CAST(SUBSTRING(@AMT,6,5)AS NUMERIC(12))+1);
 set @newid=REPLACE(@tempsid,'','0')
 end
 ELSE 
 begin
 set @tempsid='00001';
  end 
         select @tempsid
        SELECT @newid

2 个答案:

答案 0 :(得分:4)

这将在SQL中使用。

SET @newid = RIGHT(REPLICATE('0', 4) + @TempID, 4)

答案 1 :(得分:2)

请改为尝试:

--Here's your table of StudentID's
DECLARE @yourTable TABLE (StudentID VARCHAR(100));
    --INSERT INTO @yourTable(StudentID)
    --VALUES  ('SULJ0005'),
    --        ('SULJ0006');

--Here's your new name
DECLARE @FirstName VARCHAR(25)= 'Sully',
        @LastName VARCHAR(25)= 'Joan',
        @stID VARCHAR(25),
        @stIdNum INT;

--Grab the four letter part of studentID and set all to Uppercase
SELECT @stid= SUBSTRING(@FirstName,1,3)+SUBSTRING(@LastName,1,1)

--Grab the max studentID with matching four letters and add 1
    --ISNULL will return 0 and then add 1 for the first in its group
SELECT @stIdNum = ISNULL(CAST(RIGHT(MAX(StudentID),4) AS INT),0) + 1 
FROM @yourTable WHERE StudentID LIKE @stid +'%'


SELECT @stid + RIGHT(CONCAT(REPLICATE('0',4),@stIdNum),4) AS studentID

结果:

studentID
---------
SulJ0007