我有一个列有86D12345,86A12345等条目。我需要能够做两件事:
这个列是nvarchar,所以我假设我必须使用substring函数加上select MAX,但似乎无法得到结果。示例是我运行此查询时:
select substring(convert(numeric(5,0), certno),4,len(certno))+1 from maxcertno
我明白了:
Argument data type numeric is invalid for argument 1 of substring function.
与演员相同的错误
有什么想法吗?
答案 0 :(得分:0)
假设格式固定为nn N nnnnn
(没有空格)。
这给出了下一个值(12346
):
cast(substring(certno, 4, len(certno)) as int) + 1
这使整个字符串增加1(86D12346
):
left(certno, 3) + cast(cast(substring(certno, 4, len(certno)) as int) + 1 as nvarchar(50))
使用max函数:
select
cast(substring(max(certno), 4, len(max(certno))) as int) + 1,
left(max(certno), 3) + cast(cast(substring(max(certno), 4, len(max(certno))) as int) + 1 as nvarchar(50))
from YourTable
最后一个可能不是一个好的解决方案,因为它在整个查询中重复了最大值。最好先获取最大值,然后应用逻辑。或者可以将其设为函数或存储过程。