改一下:
declare @t table(field1 varchar(5))
insert @t
select '101' union all
select '1010' union all
select '104' union all
select '301-1' union all
select '201' union all
select '302-1'
select *
from @t
order by case when field1 not like '%[^0-9]%' then cast(field1 as int) else 100000 end --因为你字段的长度为5,纯数字的转换后肯定不会大于或等于100000
declare @t table(field1 varchar(5))
insert @t
select '101' union all
select '1010' union all
select '104' union all
select '301-1' union all
select '201' union all
select '302-1'
select *
from @t
order by case when field1 not like '%[^0-9]%' then cast(field1 as int) else 99999999 end
declare @t table(field1 varchar(5))
insert @t
select '101' union all
select '1010' union all
select '104' union all
select '301-1' union all
select '201' union all
select '302-1'
select * from @t order by cast(replace(field1,'-','') as bigint)