字母数字的排序问题,请教

mwxwcn 2010-07-16 02:40:15
遇到个小问题,请教大家:
数据库里根据类别排序,比如说 CD1、CD2、CD10、CD21...,希望的结果是 CD1、CD2、CD10、CD21 ,但实际是:CD1、CD10、CD2、CD21...,请教该怎样进行排序呢?谢谢
...全文
118 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-07-17
  • 打赏
  • 举报
回复
谢谢各位~~
wtandxy 2010-07-16
  • 打赏
  • 举报
回复
可以取数字进行比较,因为这样是按字符进行比较的
feilniu 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 mwxwcn 的回复:]
遇到个小问题,请教大家:
数据库里根据类别排序,比如说 CD1、CD2、CD10、CD21...,希望的结果是 CD1、CD2、CD10、CD21 ,但实际是:CD1、CD10、CD2、CD21...,请教该怎样进行排序呢?谢谢
[/Quote]

编码设计的时候就要考虑周全,CD01、CD02就不会有这个问题了。

否则就采用LS各位的方案。
csuxp2008 2010-07-16
  • 打赏
  • 举报
回复

create table test_2(id int,c1 varchar(10))

insert into test_2
select 1,'cd1'
union
select 2,'cd2'
union
select 3,'cd10'
union
select 4,'cd21'
union
select 5,'cd20'

select * from test_2 order by cast(ltrim(replace(c1,'cd',' ')) as int)

--1 cd1
--2 cd2
--3 cd10
--5 cd20
--4 cd21
htl258_Tony 2010-07-16
  • 打赏
  • 举报
回复
--比较完整通用的:

SELECT *
FROM tb
ORDER BY LEFT(col, PATINDEX('%[0-9]%', col)-1),
STUFF(col, 1, PATINDEX('%[0-9]%', col)-1, '')*1
htl258_Tony 2010-07-16
  • 打赏
  • 举报
回复
ORDER BY STUFF(COL,1,2,'')*1

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧