nvarchar的列去掉前三列变成数字排序  并取最大值如一个列为
ab1234
ab1235
ab1233
ab2233 
   重新取值从大到小排序结果为
2233
1234
1234
1233
最大值为2233

解决方案 »

  1.   

    select max(cast(substring(cname, 4 , len(cname)) as int))
    from t
      

  2.   

    这个可以,怎么去掉转换出错的行
    有的输错了 ab1234aa ab1234bb   
      

  3.   

    将 nvarchar 值 'aa' 转换为数据类型为 int 的列时发生语法错误。
      

  4.   

    --测试数据
    if not object_id(N'Tempdb..#T') is null
    drop table #T
    Go
    Create table #T([cname] nvarchar(28))
    Insert #T
    select N'ab1234bb' union all
    select N'ab1235bb' union all
    select N'ab1233' union all
    select N'ab2233'
    Go
    --测试数据结束
    SELECT  SUBSTRING([cname], PATINDEX('%[^0-9][0-9]%', [cname]) + 1,
                      CASE WHEN PATINDEX('%[0-9][^0-9]%', [cname]) = 0
                           THEN LEN(cname)
                           ELSE PATINDEX('%[0-9][^0-9]%', [cname])
                      END - PATINDEX('%[^0-9][0-9]%', [cname])) AS ID
    FROM    #T
    ORDER BY  SUBSTRING([cname], PATINDEX('%[^0-9][0-9]%', [cname]) + 1,
                      CASE WHEN PATINDEX('%[0-9][^0-9]%', [cname]) = 0
                           THEN LEN(cname)
                           ELSE PATINDEX('%[0-9][^0-9]%', [cname])
                      END - PATINDEX('%[^0-9][0-9]%', [cname])) DESC