SQL Server - 强制执行int的位数

时间:2016-08-11 12:10:34

标签: sql sql-server

我有一个唯一的ID,我以CCYYMMDDxxxx格式生成程序端,其中xxxx是一个4位数的字符串,将从0001开始自动递增。

为了计算下一个元素,我编写了一个查询的一部分,该查询使用子字符串从字符串中获取这4个数字。

DECLARE @number int, @nextstring varchar(4)
SET @number = (SELECT CONVERT(int, SUBSTRING(Payment_ID, 9, 4), 103) FROM Orders)

我需要能够将它递增1,但保持4位数格式。我遇到了'正确'的关键字,但我不知道有多少0需要放在它前面。

如果没有一堆IF,有没有一种很好的方法可以做到这一点?当然,我可以计算长度,并在开始时将相应的0的数字放在一起,但这不包括9,99和999.

1 个答案:

答案 0 :(得分:2)

我真的认为identity列是处理此问题的最佳方法。 。 。然后分配序号。

但是,如果你想这样做,你需要留下数字。这是一种根据表中的值获取下一个id的方法:

SELECT (LEFT(MAX(payment_id), 8) +
        RIGHT('0000' + CAST(CAST(RIGHT(MAX(payment_id), 4) as int) + 1 as VARCHAR(255))
       )
FROM Orders;

这不会验证id是否足够长。让我再说一遍:我认为最好使用identity列作为id,然后在需要该信息时构建所需的任何属性(例如一天内的数字)。