我正在尝试生成一个最终存储为字符串(varchar)的数字。 e.g。
我要做的是获取存储的最后一个号码,例如ABC00000009并生成下一个ABC00000010的数字。怎么做?
如果我从中提取整数而不是我将得到1或10,如何按照8位格式制作。
真的很感激任何帮助。
答案 0 :(得分:2)
当然,如果无法更改表格结构,您可以尝试:
DECLARE @lastValue VARCHAR(15) = 'ABC00000001'
SELECT CONCAT('ABC', RIGHT(100000000 + CAST(RIGHT(@lastValue, 8) AS INT) + 1, 8))
Result
-----------
ABC00000002
答案 1 :(得分:0)
我建议您创建一个标识列。这将增加(通常为1,但不总是)。然后创建一个计算列:
alter table t add generated_number as
('ABC' + right(replicate('0', 8) + cast(idcol as varchar(255)), 8));
答案 2 :(得分: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 |
+----+--------------+--------------+