我有这个脚本,我通过从名字和姓氏中取一些字符来创建一个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
答案 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