• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

无0占位的字符串序数如何排列

社会栋梁 2011-01-10 12:17:20
字段为递增序数,但为字符串类型

1
...
9
10
11
...
101
111
...
1001
1111
...

简单select 后顺序是按首拼排序的,不符合项目要求

如何才能按上述顺序排列

谢谢!!
...全文
46 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
joyhen 2011-01-10
字符串类型转换,cast(col as bigint),或者Convert(bigint,col)
回复
dawugui 2011-01-10
[Quote=引用 8 楼 yujia120 的回复:]
引用 7 楼 dawugui 的回复:
引用 6 楼 yujia120 的回复:
引用 5 楼 josy 的回复:
SQL code
select * from tb order by cast(col as bigint) asc


要保证该字段都是数字,如果有非数字的要做个判断,或者设定你的排序规则(比如,字母和数字哪个在前,哪个在后)


我是楼主
如果有前缀和后缀呢……
[/Quote]
create table tb(col varchar(10))
insert into tb values('1.b')
insert into tb values('9.b')
insert into tb values('10.b')
insert into tb values('11.b')
insert into tb values('101.b')
insert into tb values('111.b')
insert into tb values('1001.b')
insert into tb values('1111.b')
go

select * from tb order by cast(replace(col,'.b','') as int)

select * from tb order by cast(left(col,charindex('.b',col)-1) as int)

drop table tb

/*
col
----------
1.b
9.b
10.b
11.b
101.b
111.b
1001.b
1111.b

(所影响的行数为 8 行)
*/

/*
col
----------
1
9
10
11
101
111
1001
1111

(所影响的行数为 8 行)
*/
回复
社会栋梁 2011-01-10
[Quote=引用 7 楼 dawugui 的回复:]
引用 6 楼 yujia120 的回复:
引用 5 楼 josy 的回复:
SQL code
select * from tb order by cast(col as bigint) asc


要保证该字段都是数字,如果有非数字的要做个判断,或者设定你的排序规则(比如,字母和数字哪个在前,哪个在后)


我是楼主
如果有前缀和后缀呢?


SQL code
最好给出……
[/Quote]

1.b
...
9.b
10.b
11.b
...
101.b
111.b
...
1001.b
1111.b
...
回复
dawugui 2011-01-10
[Quote=引用 6 楼 yujia120 的回复:]
引用 5 楼 josy 的回复:
SQL code
select * from tb order by cast(col as bigint) asc


要保证该字段都是数字,如果有非数字的要做个判断,或者设定你的排序规则(比如,字母和数字哪个在前,哪个在后)


我是楼主
如果有前缀和后缀呢?
[/Quote]
最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
如果有多表,表之间如何关联?


发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281

回复
社会栋梁 2011-01-10
[Quote=引用 5 楼 josy 的回复:]
SQL code
select * from tb order by cast(col as bigint) asc


要保证该字段都是数字,如果有非数字的要做个判断,或者设定你的排序规则(比如,字母和数字哪个在前,哪个在后)
[/Quote]

我是楼主
如果有前缀和后缀呢?
回复
百年树人 2011-01-10
select * from tb order by cast(col as bigint) asc


要保证该字段都是数字,如果有非数字的要做个判断,或者设定你的排序规则(比如,字母和数字哪个在前,哪个在后)
回复
haitao 2011-01-10
order by 0+col
回复
dawugui 2011-01-10
create table tb(col varchar(10))
insert into tb values('1')
insert into tb values('9')
insert into tb values('10')
insert into tb values('11')
insert into tb values('101')
insert into tb values('111')
insert into tb values('1001')
insert into tb values('1111')
go

select * from tb order by cast(col as int)

drop table tb

/*
col
----------
1
9
10
11
101
111
1001
1111

(所影响的行数为 8 行)
*/
回复
bancxc 2011-01-10
转化成数字试试

order by cast(col as int)
回复
dawugui 2011-01-10
order by cast(col as int)
回复
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2011-01-10 12:17
社区公告
暂无公告