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

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

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

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

如何才能按上述顺序排列

谢谢!!
...全文
86 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
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)

34,838

社区成员

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

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