我有一个用户表,其中ID是这样的:ASmith1,Asmith2,Asmith3,Asmith5,Asmith9,Asmith10,Asmith13,Asmith15,Asmith21等。
当我获得该列的Max()时,我得到了Asmith9。我可以用什么查询或函数来获取Asmith21?
答案 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: