2017-06-05 60 views
1

我試圖產生一個數字,最終將被存儲爲字符串(varchar)。例如唯一8位增量編號

  1. 首先 - ABC00000001
  2. 二線ABC00000002 ......................... 我能夠生成字符串作爲預期。現在的問題是,增量編號。

我想要做的是得到最後一個存儲的數字例如ABC00000009並生成下一個數字,即ABC00000010。如何做同樣的事情?

如果我從這裏提取整數比我會得到1或10,如何使它根據8位數字格式。

任何幫助真的不勝感激。

+0

存放在不同列中的數字和字符串模式。如果字符串模式是靜態的(總是ABC),則不需要將其存儲在表中。 –

+0

@ ArvindDhakad,由於當前的結構,我無法將它們存儲爲單獨的。我所有的是一個varchar列,我應該存儲最終的字符串。 – user2645738

回答

2

當然,如果改變了表結構不是一個選項,你可以試試這個:

DECLARE @lastValue VARCHAR(15) = 'ABC00000001' 
SELECT CONCAT('ABC', RIGHT(100000000 + CAST(RIGHT(@lastValue, 8) AS INT) + 1, 8)) 

Result 
----------- 
ABC00000002 
+0

非常好。這就是我一直在尋找的。你拯救了我的一天。非常感謝。 – user2645738

+0

@ user2645738很高興幫助 – Stephen

0

我建議你創建一個標識列。這將增加(通常是1,但不總是)。然後創建一個計算列:

alter table t add generated_number as 
    ('ABC' + right(replicate('0', 8) + cast(idcol as varchar(255)), 8)); 
0

幾乎同樣的方法Gordon Linoff已經採取,我只是喜歡在可能的情況,而不是字符串連接使用數學。我的答案不同,只是因爲我將id值添加到100000000而不是使用複製。

CREATE TABLE dbo.test (
    id int IDENTITY(1, 1) PRIMARY KEY 
    , some_value sysname UNIQUE 
    , super_column AS 'ABC' + RIGHT(100000000 + id, 8)); 
GO 
INSERT INTO dbo.test (some_value) 
VALUES ('some_value_1'), ('some_value_2'); 

SELECT * 
FROM dbo.test AS T; 

結果:

+----+--------------+--------------+ 
| id | some_value | super_column | 
+----+--------------+--------------+ 
| 1 | some_value_1 | ABC00000001 | 
| 2 | some_value_2 | ABC00000002 | 
+----+--------------+--------------+ 
+0

難道你不能只用100000000作爲第一個值的種子IDENTITY? – Bridge

+0

沒有想到這一點。我沒有看到任何理由不這樣做。良好的捕獲,兩種方式都可以。取決於OP實際需要什麼,如果他想擁有身份值 - 也許從1開始更有意義。 –