当前位置: 代码迷 >> Sql Server >> "302DK230" 数字与字母混合字符串,按中间字母的第二个字母进行排序解决办法
  详细解决方案

"302DK230" 数字与字母混合字符串,按中间字母的第二个字母进行排序解决办法

热度:63   发布时间:2016-04-27 20:06:05.0
"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 @[email protected]+substring(@s,PATINDEX ( '%[A-Z]% ' , @s ),1)
set @s=stuff(@s,PATINDEX ( '%[A-Z]% ' , @s ),1, ' ')
if PATINDEX ( '%[A-Z]% ' , @s )> 0
begin
set @[email protected]+substring(@s,PATINDEX ( '%[A-Z]% ' , @s ),1)
set @s=stuff(@s,PATINDEX ( '%[A-Z]% ' , @s ),1, ' ')
end
end
set @[email protected][email protected]
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 ', ' ')
  相关解决方案