从序列中获取下一个值的SQL语句

3

我正在尝试从这个字段中获取下一个值 SU - 1 /2016

我使用的查询语句

SELECT RIGHT('000' + CAST(ISNULL(MAX(SUBSTRING(InvoiceNO,4, 1)), 0) + 1 AS VARCHAR(4)), 4)
from [dbo].[Invoice]

查询输出为0001,应该是0002
4个回答

3

您需要从第4个位置开始截取值SU - 1 /2016,得到"-"。所以要获取1,您需要从第6个位置开始,这将给您期望的输出。

SELECT 
RIGHT('000' + CAST(ISNULL(MAX(SUBSTRING(InvoiceNO,6, 1)), 0) + 1 AS VARCHAR(4)), 4) 
from [dbo].[Invoice]

1
如果我理解正确的话,你正在使用SU - 1 /2016上的substring函数。你从第4个位置开始取一个长度为1的子字符串(请记住,substring是基于1而不是0的)。所以你得到了-。如果你尝试:
SELECT '-' + 1

给出:1。 你可能需要从位置6开始进行“子字符串”操作。

1
使用这段代码。
SELECT RIGHT('000' + CAST((ISNULL(MAX(SUBSTRING(exampleColumn,6, 1)), 0) + 1) AS VARCHAR(4)), 4)
from [dbo].tblExample

你需要从第4个位置取一个字符,但你的数据“1”在第6个位置。

1

您可以让脚本变得更短,并使用以下内容:

SELECT RIGHT(MAX(SUBSTRING(InvoiceNO,6, 1)) + 10001, 4)
-- Including this for test:
FROM (values('SU - 1 /2016')) x(InvoiceNO)

SELECT RIGHT(MAX(SUBSTRING(InvoiceNO,6, 1)) + 10001, 4) -- 包括此测试代码: FROM (values('SU - 0002 /2016')) x(InvoiceNO) 给定不同的输出 - Mukesh Kalgude
@MukeshKalgude 我已经尝试了,但是我得到的输出与其他答案相同。你能更具体一些吗? - t-clausen.dk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接