"302DK230" 数字与字母混合字符串,按中间字母的第二个字母进行排序
302DK200
31A15
H40B20
按数字之间的第二个字母排序,数字之间的字母可能是一位,可能是两位.
字符串的首字可能是字母,也可能没字母。
排序要求:数字之间的第二个字母排序
跪求!
------解决方案--------------------写个函数保险点
create function fn_convertOrder(
@s varchar(100)
)
returns varchar(100)
as
begin
declare @r varchar(100)
set @r= ' '
if PATINDEX ( '%[A-Z]% ' , @s )> 0
begin
set @r=@r+substring(@s,PATINDEX ( '%[A-Z]% ' , @s ),1)
set @s=stuff(@s,PATINDEX ( '%[A-Z]% ' , @s ),1, ' ')
if PATINDEX ( '%[A-Z]% ' , @s )> 0
begin
set @r=@r+substring(@s,PATINDEX ( '%[A-Z]% ' , @s ),1)
set @s=stuff(@s,PATINDEX ( '%[A-Z]% ' , @s ),1, ' ')
end
end
set @r=@r+@s
return @r
end
go
--调用
select * from tablename order by dbo.fn_convertOrder(字段)
------解决方案--------------------declare @t table(s varchar(100))
insert into @t
select '302DK200 ' union all
select '31A15 ' union all
select 'H40B20 '
--try this one out
select * from @t order by replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(stuff(reverse(s),1,1, ' '), '0 ', ' '), '1 ', ' '), '2 ', ' '), '3 ', ' '), '4 ', ' '), '5 ', ' '), '6 ', ' '), '7 ', ' '), '8 ', ' '), '9 ', ' ')