我有一个唯一的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.
答案 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,然后在需要该信息时构建所需的任何属性(例如一天内的数字)。