求字符串排序?'051703121129'求兄弟们写一个函数,将字符串:'051703121129' 转换成:'030511121729' 每二位是一个字符串
'05 17 03 12 11 29'-------'03 05 11 12 17 29' 结果要:将字符串:'051703121129' 转换成:'030511121729'
'05 17 03 12 11 29'-------'03 05 11 12 17 29' 结果要:将字符串:'051703121129' 转换成:'030511121729'
drop function f_GetStr
go
create function dbo.f_GetStr(@s varchar(100))
returns varchar(100)
as
begin
declare @t table(s varchar(10))
while len(@s)>0
begin
insert @t select left(@s,2)
set @s=stuff(@s,1,2,'')
end
select @s=''
select @s=@s+s
from @t
order by s
return @s
end
godeclare @s char(20)
set @s='051703121129'
select result=dbo.f_GetStr(@s)/*
result
-------------
030511121729
*/
returns varchar(1000)
as
begin
declare @t table (s varchar(2))
declare @i int, @ret varchar(1000)
select @i = 0, @ret = ''
while @i < (len(@s)+1)/2
begin
insert @t select substring(@s,@i*2+1,2)
set @i = @i + 1
end
select @ret = @ret + s from @t order by s
return @ret
end
goselect dbo.fn_test('051703121129') --> 030511121729
IF OBJECT_ID('f_test') IS NOT NULL
DROP FUNCTION f_test
GOCREATE FUNCTION f_test (@var VARCHAR(50))
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @test TABLE (tt VARCHAR(2))
WHILE LEN(@var) > 0
BEGIN
INSERT INTO @test
SELECT LEFT(@var,2)
SELECT @var = STUFF(@var,1,2,'')
END
DECLARE @str VARCHAR(50)
SELECT @str = ISNULL(@str,'') + t.tt
FROM (SELECT TOP 100
tt
FROM @test
ORDER BY CAST(tt AS INT)
) AS t
RETURN @str
END
GODECLARE @var VARCHAR(50)
SET @var = '051703121129'
SELECT dbo.f_test(@var)
OK,以上乃正解。
建个临时表,两位存一个字段,在排序组合成新字符串输出。
不用函数了,存储过程直接select出来也行嘛。