Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 如何正确地对字母数字列执行max()_Sql Server 2005_Tsql - Fatal编程技术网

Sql server 2005 如何正确地对字母数字列执行max()

Sql server 2005 如何正确地对字母数字列执行max(),sql-server-2005,tsql,Sql Server 2005,Tsql,我有一个用户表,其中ID是这样的:ASmith1、Asmith2、Asmith3、Asmith5、Asmith9、Asmith10、Asmith13、Asmith15、Asmith21等等 当我得到该列的Max()时,我得到Asmith9。我可以使用什么查询或函数来获取Asmith21?没有可能的直接解决方案,但是您可以存储固定长度的字符串,这样就可以了: Asmith001, Ashmith002, Ashmit021, Ashmit100 另一种方法是使用字符串函数在查询中实现这样的功能,

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


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

没有可能的直接解决方案,但是您可以存储固定长度的字符串,这样就可以了:

Asmith001, Ashmith002, Ashmit021, Ashmit100

另一种方法是使用字符串函数在查询中实现这样的功能,然后您可以进行排序。

如果您可以控制名称,您可以根据需要使用足够的前导零作为数字后缀。否则,需要将数字部分与字母部分分开,并进行相应排序

SQL Server没有现成的正则表达式,但您可以为它创建一个函数,如本文所示,该函数利用SQL Server对.Net的访问:


或更好地存储为两个字段-字符然后是整数
   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;