create function getorder(@field varchar(1000))
returns numeric(38)
as
begin
declare @bb int,@cc int,@value varchar(8000)
select @bb=0,@cc=charindex('.',@field)
set @value=right(replicate('0',3)+substring(@field,@bb,@cc.@bb),3)
if @value='' return left(@field+replicate('0',38),38)
while @cc>0
begin
set @bb=@cc+1
set @cc=charindex('.',@field,@bb)
set @value=@value+right(replicate('0',3)+cast(substring(@field,@bb,case when @cc>0 then @cc.@bb else len(@field) end) as varchar),3)
end
return cast(left(@value+replicate('0',38),38) as numeric(38))
enddeclare @ table (a varchar(100))
insert @ values('1')
insert @ values('1.1')
insert @ values('2.1.44.1.2.34')
insert @ values('2.1.45.1.1')
insert @ values('2.1')
insert @ values('3.2')select * from @ order by dbo.getorder(a)
returns numeric(38)
as
begin
declare @bb int,@cc int,@value varchar(8000)
select @bb=0,@cc=charindex('.',@field)
set @value=right(replicate('0',3)+substring(@field,@bb,@cc.@bb),3)
if @value='' return left(@field+replicate('0',38),38)
while @cc>0
begin
set @bb=@cc+1
set @cc=charindex('.',@field,@bb)
set @value=@value+right(replicate('0',3)+cast(substring(@field,@bb,case when @cc>0 then @cc.@bb else len(@field) end) as varchar),3)
end
return cast(left(@value+replicate('0',38),38) as numeric(38))
enddeclare @ table (a varchar(100))
insert @ values('1')
insert @ values('1.1')
insert @ values('2.1.44.1.2.34')
insert @ values('2.1.45.1.1')
insert @ values('2.1')
insert @ values('3.2')select * from @ order by dbo.getorder(a)
returns varchar(8000)
as
begin
declare @b varchar(8000)
select @b='',@a=@a+'.'
while charindex('.',@a)>0
begin
set @b=@b+right('000'+substring(@a,1,charindex('.',@a)-1),3)
set @a=right(@a,len(@a)-charindex('.',@a))
end
return @b
end
declare @ table (a varchar(100))
insert @ values('1')
insert @ values('3.2')
insert @ values('2.1.45.1.1')
insert @ values('2.1.44.1.2.34')
insert @ values('1.1')
insert @ values('2.1')select *,dbo.getNewstr(a) from @ order by dbo.getNewstr(a)