独特的8位增量数字

时间:2017-06-05 11:04:22

标签: sql sql-server

我正在尝试生成一个最终存储为字符串(varchar)的数字。 e.g。

  1. 首先 - ABC00000001
  2. Second- ABC00000002 ......................... 我能够按预期生成字符串。现在的问题是,增量号。
  3. 我要做的是获取存储的最后一个号码,例如ABC00000009并生成下一个ABC00000010的数字。怎么做?

    如果我从中提取整数而不是我将得到1或10,如何按照8位格式制作。

    真的很感激任何帮助。

3 个答案:

答案 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  |
+----+--------------+--------------+