sql-server – SQL Server 2008 – 按数字顺序排列字符串
发布时间:2020-05-29 18:06:32 所属栏目: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 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQLserver中字符串查找功能patindex和charindex的区别
- 如何在模型第一种方法中使用结构注释来将SQL类型设置为Date
- sql-server-2008 – SQL Server 2008 SELECT * FROM @varia
- sql – 在两个varchar字段上创建Unqiue不区分大小写的约束
- 将DataTable作为存储过程参数的用法实例详解
- 一些很有用的SQLite命令总结
- 从SQL Server 2005查询Active Directory
- database – 检查INSERT INTO语句是否成功
- 数据库 – 如何在同一个数据集的集合中克隆(重复)MongoDB对
- mysql把一个表某个字段的内容复制到另一张表的某个字段的SQ
