22,210
社区成员
发帖
与我相关
我的任务
分享
select * from #data
order by isnumeric(data),right(space(20)+data,20)
/*
data
----------
A
B
C
D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(18 行受影响)
*/
select * from #data
order by case when isnumeric(data) = 1 then cast(data as int) else 0 end,data
select * from #data
order by case when isnumeric(data) = 1 then cast(data as int) else 0 end,data
create table #data (data varchar(10))
insert into #data
select '1' data union all
select '2' data union all
select '3' data union all
select '4' data union all
select '5' data union all
select '6' data union all
select '7' data union all
select '8' data union all
select '9' data union all
select '10' data union all
select '11' data union all
select '12' data union all
select '13' data union all
select '14' data union all
select 'A' data union all
select 'B' data union all
select 'C' data union all
select 'D' data
select *
from #data
order by case when isnumeric(data)=0 then 1 else 2 end
drop table #data
/*
data
----------
A
B
C
D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
*/
select *
,case when isnumeric(data) = 1 then CAST(data AS int) end
,case when isnumeric(data) = 0 then data end
from #data
order by isnumeric(data)
data
---------- ----------- ----------
A NULL A
B NULL B
C NULL C
D NULL D
-1 -1 NULL
-2 -2 NULL
-3 -3 NULL
1 1 NULL
2 2 NULL
3 3 NULL
4 4 NULL
5 5 NULL
6 6 NULL
7 7 NULL
8 8 NULL
9 9 NULL
10 10 NULL
11 11 NULL
12 12 NULL
13 13 NULL
14 14 NULL
(21 行受影响)
select *
from #data
order by isnumeric(data)
,case when isnumeric(data) = 1 then CAST(data AS int) end
,case when isnumeric(data) = 0 then data end
data
----------
A
B
C
D
-3
-2
-1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(21 行受影响)
select * from #data order by
case when isnumeric(data) = 1 then 1 else 0 end,case when isnumeric(data) = 1 then cast(data as int)
else data end