declare @ 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')
函数:
create function getNewstr(@a varchar(8000))
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
语句:
select * from table order by dbo.getNewstr(a)
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')
函数:
create function getNewstr(@a varchar(8000))
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
语句:
select * from table order by dbo.getNewstr(a)
returns varchar(8000)
as
begin
declare @bb int,@cc int,@value varchar(8000)
select @bb=0,@cc=charindex('-',@field)
set @value=right(replicate('0',10)+substring(@field,@bb,@cc-@bb),10)
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',10)+cast(substring(@field,@bb,case when @cc>0 then @cc-@bb else len(@field) end) as varchar),10)
end
return @value
end
go
declare @ table (l1 varchar(1000))
insert @ values('1')
insert @ values('1-1')
insert @ values('2-1-4-1')
insert @ values('3-1-13-1-1')
insert @ values('2-1')
insert @ values('3-2')
insert @ values('13-2')
insert @ values('23-2')select *,dbo.getorder(l1) from @ order by dbo.getorder(l1)
go
drop function getorder