如何正确执行字母数字列上的max()

时间:2011-06-08 23:51:17

标签: sql-server-2005 tsql

我有一个用户表,其中ID是这样的:ASmith1,Asmith2,Asmith3,Asmith5,Asmith9,Asmith10,Asmith13,Asmith15,Asmith21等。

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

Asmith001, Ashmith002, Ashmit021, Ashmit100

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

答案 2 :(得分:0)

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

SQL Server没有开箱即用的正则表达式,但你可以为它创建一个函数,如本文所示利用SQL Server访问.Net:

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