sql-server – SQL Server 2008 – 按数字顺序排列字符串
发布时间:2020-12-12 08:38:24 所属栏目:MsSql教程 来源:网络整理
导读:我的表中有以下值: ABCABC1ABC2ABC3 and so on...ABC11ABC12ABC13 and so on..ABC20ABC21ABC22 and so on.. 所以基本上我有的是任何字符串值(不总是ABC,任何字符串值),可以跟随数字,或者它可能只是一个没有数字的字符串. 当我从列表中选择*从我的列asc我得到
我的表中有以下值:
ABC ABC1 ABC2 ABC3 and so on... ABC11 ABC12 ABC13 and so on.. ABC20 ABC21 ABC22 and so on.. 所以基本上我有的是任何字符串值(不总是ABC,任何字符串值),可以跟随数字,或者它可能只是一个没有数字的字符串. 当我从列表中选择*从我的列asc我得到以下结果: ABC ABC1 ABC11 ABC12 ABC13 ABC2 ABC20 ABC21 ABC22 ABC3 ABC31 ABC32 我需要它按数字排序: ABC ABC1 ABC2 ABC3 ABC11 ABC12 ABC13 ABC20 ABC21 ABC22 ABC31 ABC32 这怎么可以实现? 解决方法您可以使用PATINDEX()函数,如下所示:select * from Test order by CAST(SUBSTRING(Name + '0',PATINDEX('%[0-9]%',Name + '0'),LEN(Name + '0')) AS INT) SQL Fiddle Demo 如果您在字符串的中间有数字,那么您需要创建小的用户定义的函数,从字符串获取数字并根据该数字排序数据,如下所示: CREATE FUNCTION dbo.fnGetNumberFromString (@strInput VARCHAR(255)) RETURNS VARCHAR(255) AS BEGIN DECLARE @intNumber int SET @intNumber = PATINDEX('%[^0-9]%',@strInput) WHILE @intNumber > 0 BEGIN SET @strInput = STUFF(@strInput,@intNumber,1,'') SET @intNumber = PATINDEX('%[^0-9]%',@strInput) END RETURN ISNULL(@strInput,0) END GO 您可以通过以下方式对数据进行排序: select Name from Test order by dbo.fnGetNumberFromString(Name),Name (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |