我試圖產生一個數字,最終將被存儲爲字符串(varchar)。例如唯一8位增量編號
- 首先 - ABC00000001
- 二線ABC00000002 ......................... 我能夠生成字符串作爲預期。現在的問題是,增量編號。
我想要做的是得到最後一個存儲的數字例如ABC00000009並生成下一個數字,即ABC00000010。如何做同樣的事情?
如果我從這裏提取整數比我會得到1或10,如何使它根據8位數字格式。
任何幫助真的不勝感激。
我試圖產生一個數字,最終將被存儲爲字符串(varchar)。例如唯一8位增量編號
我想要做的是得到最後一個存儲的數字例如ABC00000009並生成下一個數字,即ABC00000010。如何做同樣的事情?
如果我從這裏提取整數比我會得到1或10,如何使它根據8位數字格式。
任何幫助真的不勝感激。
當然,如果改變了表結構不是一個選項,你可以試試這個:
DECLARE @lastValue VARCHAR(15) = 'ABC00000001'
SELECT CONCAT('ABC', RIGHT(100000000 + CAST(RIGHT(@lastValue, 8) AS INT) + 1, 8))
Result
-----------
ABC00000002
非常好。這就是我一直在尋找的。你拯救了我的一天。非常感謝。 – user2645738
@ user2645738很高興幫助 – Stephen
我建議你創建一個標識列。這將增加(通常是1,但不總是)。然後創建一個計算列:
alter table t add generated_number as
('ABC' + right(replicate('0', 8) + cast(idcol as varchar(255)), 8));
幾乎同樣的方法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 |
+----+--------------+--------------+
難道你不能只用100000000作爲第一個值的種子IDENTITY? – Bridge
沒有想到這一點。我沒有看到任何理由不這樣做。良好的捕獲,兩種方式都可以。取決於OP實際需要什麼,如果他想擁有身份值 - 也許從1開始更有意義。 –
存放在不同列中的數字和字符串模式。如果字符串模式是靜態的(總是ABC),則不需要將其存儲在表中。 –
@ ArvindDhakad,由於當前的結構,我無法將它們存儲爲單獨的。我所有的是一個varchar列,我應該存儲最終的字符串。 – user2645738