搜索:
首页 >> 数据库 >> MsSQL教程 >> SQL 字母数字混合型字段 按里面的数字排序

SQL 字母数字混合型字段 按里面的数字排序

2010-4-23 asp之家 网友评论投递文章

网上找了很多。貌似没什么好的解决办法。

自己参考了下。把它直接整成一条SQL语句了。

不过字段的格式只允许前面或者后面有字符。中间不允许出现字符

字段如下。前面可能有字符也可能没有,后面也一样。我们要的结果是:按字段里面的数字升序排列。

正常情况下。我们只要 order by DishesEnname 貌似就可以。但如果字段值是这样子的:"L101"或者"101"

那结果就不是我们预期的了。因为它把"L101"或者"101"排到最前面去了。而我们要的结果是排在后面的。

解决的SQL语句如下:

select DishesEnname,Cast((left(right(DishesEnname,len(DishesEnname)-patindex('%[0-9]%',DishesEnname)+1)+'a',patindex('%[a-z,A-Z]%',right(DishesEnname,len(DishesEnname)-patindex('%[0-9]%',DishesEnname)+1)+'a')-1)) as int) from tdishes
where DishesDepartmentNo=1590
order by Cast((left(right(DishesEnname,len(DishesEnname)-patindex('%[0-9]%',DishesEnname)+1)+'a',patindex('%[a-z,A-Z]%',right(DishesEnname,len(DishesEnname)-patindex('%[0-9]%',DishesEnname)+1)+'a')-1)) as int)

结果图如下:

 



结果正是我们所需要的。

具体的可以拿两个小例子来看下。

去掉左侧的字母:
declare @t as varchar(200)
select @t='1234567aa'
select right(@t,len(@t)-patindex('%[0-9]%',@t)+1)

 

去掉右侧的字母:
declare @tt varchar(200)
select @tt='123456'+'a'
select left(@tt,patindex('%[a-z,A-Z]%',@tt)-1)

Tags:sql  字符串  数字  排序 
站长工具
友情链接批量查询:
相关文章
loading 请稍等,评论加载中...

学习Asp到Asp之家(Aspxhome.com)

闽ICP备09044667号-4