2015-04-02 44 views
0

我有這個腳本,我通過從第一個和最後一個名字中取一些字符創建一個ID,如果該組合已經存在,則添加1。我很確定我很接近,但我的問題是這樣的。 如果名字Sully Joan被輸入,我需要得到SULJ0002(2,因爲有這個名字的人已經進入了,下一個人將是SulJ0003)。 我的問題是,在將數字轉換爲數字後返回數字並添加1後,我返回'2',我試圖設計一種方法來取回'0002',而不對前三個零進行硬編碼。將零添加到varchar

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 

回答

4

這將在SQL中工作。

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

這是我使用。 – SQLburn 2015-04-02 19:36:04

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 
+0

使用'COUNT'與OP使用最大值(用'ORDER BY'寫成'TOP 1')的值明顯不同。例如,如果一些用戶隨時間被刪除,則計數和最大值將會不同。 – HABO 2015-04-02 19:55:39

+0

好點。我會編輯我的答案 – Stephan 2015-04-02 19:57:10