2011-06-08 55 views
2

我对用户的表,其中ID是这样:ASmith1,Asmith2,Asmith3,Asmith5,Asmith9,Asmith10,Asmith13,Asmith15,Asmith21等如何在字母数字列执行MAX()正确地

当我得到该列的Max()时,我得到Asmith9。我可以使用什么查询或功能来获取Asmith21?

回答

0

没有可能的解决方案直接,但是你可以存储固定长度的字符串,然后就可以像:

Asmith001, Ashmith002, Ashmit021, Ashmit100 

另一种方法是使用字符串函数查询来实现这样的,然后你可以订购。

+1

或者更好地存储为两个字段 - 字符然后是整数 – Mark 2011-06-09 00:10:08

0

如果您可以控制名称,那么可以使用足够的前导零来满足您的需要。如果不行,你需要从alpha部分拆分数字部分并进行相应的排序。

SQL Server没有正则表达式开箱的,但你可以为它创建一个函数,如在这篇文章中利用了SQL Server的访问到.NET中:

http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

4
declare @Users table(ID varchar(10)); 
    insert into @Users 
     select 'ASmith1' union all 
     select 'Asmith2' union all 
     select 'Asmith3' union all 
     select 'Asmith5' union all 
     select 'Asmith9' union all 
     select 'Asmith10' union all 
     select 'Asmith13' union all 
     select 'Asmith15' union all 
     select 'Asmith21' 

    select top 1 ID 
    from @Users 
    order 
    by  len(ID) desc, ID desc; 
相关问题