一个SQL查询问题

xhblzj 2008-04-07 11:41:04
看看这个结果:
ID 数据
1528 879
152801 105
15280101 12
15280102 30
15280103 24
******
1529 1421
152901 154
******
15290101 22
15290102 24
******
想变为:
ID 数据
15280101 12
15280102 30
15280103 24
152801 105
1528 879
******
15290101
15290102
******
152901
1529
长的升序排列,短的放在后面,数据很多的???
Order by Len(ID) Desc
不行
Order by Len(ID) Desc
后的结果:
ID 数据
15280101 12
15280102 30
******
15280201 41
15280202 25
******
152901
152802
152801
1529
1528
不是这个,刚才结贴了,不好意思

...全文
100 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhblzj 2008-04-08
  • 打赏
  • 举报
回复
经实际运行,2楼的还是不行,谢谢1楼,谢谢各位楼主,结贴了
Limpire 2008-04-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xhblzj 的回复:]
感谢1,2楼,1楼的能得到结果,2楼的得不到,order by ltrim(ID)+replicate('9',100-len(id))
中的9和100是什么意思
[/Quote]
select *, ltrim(ID)+replicate('9',100-len(id)) from #T order by ltrim(ID)+replicate('9',100-len(id))
xhblzj 2008-04-08
  • 打赏
  • 举报
回复
感谢1,2楼,1楼的能得到结果,2楼的得不到,order by ltrim(ID)+replicate('9',100-len(id))
中的9和100是什么意思
zbc1009 2008-04-08
  • 打赏
  • 举报
回复
楼上Limpire正解,如果还包含字母在ID中,则扩大一下范围:

select * from #T order by ltrim(ID)+replicate('z',100-len(id))
Limpire 2008-04-07
  • 打赏
  • 举报
回复
--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (ID varchar(8),数据 int)
insert into #T
select '1528',879 union all
select '152801',105 union all
select '15280101',12 union all
select '15280102',30 union all
select '15280103',24 union all
select '1529',1421 union all
select '152901',154 union all
select '15290101',22 union all
select '15290102',24

select * from #T order by ltrim(ID)+replicate('9',100-len(id))

/*
ID 数据
-------- -----------
15280101 12
15280102 30
15280103 24
152801 105
1528 879
15290101 22
15290102 24
152901 154
1529 1421
*/
-狙击手- 2008-04-07
  • 打赏
  • 举报
回复
create table ta(ID int,d int)
insert ta select
1528 , 879 union select
152801 , 105 union select
15280101 , 12 union select
15280102 , 30 union select
15280103 , 24 union select
1529 , 1421 union select
152901 , 154 union select
15290101 , 22 union select
15290102 , 24


go

select *
from ta
order by left(id,4) ,len(id) desc

drop table ta

/*
ID d
----------- -----------
15280101 12
15280102 30
15280103 24
152801 105
1528 879
15290101 22
15290102 24
152901 154
1529 1421

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

34,837

社区成员

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

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