选择最大值时遇到问题

时间:2014-09-11 21:21:55

标签: sql

我有一个列有86D12345,86A12345等条目。我需要能够做两件事:

  1. 选择此列的最大值
  2. 添加1以获取下一个号码
  3. 这个列是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.
    

    与演员相同的错误

    有什么想法吗?

1 个答案:

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

最后一个可能不是一个好的解决方案,因为它在整个查询中重复了最大值。最好先获取最大值,然后应用逻辑。或者可以将其设为函数或存储过程。