日期:2014-05-18  浏览次数:20599 次

请问这样一组数据如何格式化,希望用函数实现!进来看看,在DELPHI里面函数实现了,但在SQL 里面函数怎样写呢?
比如   1             格式化成   0001
          2             格式化成   0002
          2-2         格式化成   00010002
          2-2-1     格式化成   000100020001
          3             格式化成   0003
          3-1         格式化成   00030001
          ...
          3-10       格式化成   00030010
          3-10-1   格式化成   00030010001
          ....
          10           格式化成   0010
          10-1       格式化成   0010001
          ....


          即中间分隔符‘-’是不确定有多少级,有两级、三级   、四级都有可能,希望用函数实现!

------解决方案--------------------
create function fn070208(@str varchar(10))
returns varchar(100)
as
begin
return '000 '+replace(@str, '- ', '00 ')
end
GO

print dbo.fn070208( '3-10-1 ')


drop function fn070208


结果
00030010001
------解决方案--------------------
REPLACE( '- '+ '3-10-1 ', '- ', '000 ')
------解决方案--------------------
create table t(c varchar(20))
insert into t select '1 '
union all select '2 '
union all select '2-2 '
union all select '2-2-1 '
union all select '3 '
union all select '3-1 '
union all select '3-10 '
union all select '3-10-1 '
union all select '10 '
union all select '10-1 '

select REPLACE( '- '+c, '- ', '000 ')c from t
-------------------------
c
0001
0002
00020002
000200020001
0003
00030001
000300010
0003000100001
00010
000100001

------解决方案--------------------
办法太复杂~~好像不是楼主想要的~~~~.........
先分解 '3-10-1 '~~~然后加 '0 '每位加成四位!!!
------解决方案--------------------
如果,以四位为标准,解决了:)

create function fun_name(@AllChar varchar(100))
returns varchar(100)
as
begin
declare @FirstChar varchar(50)
declare @FirstPoint int
declare @lenth int
declare @returnChar varchar(100)
set @lenth=len(@AllChar)
set @FirstPoint=charindex( '- ',@AllChar)
set @returnChar= ' '
set @allChar=@allChar+ '- '

while( @FirstPoint> 0)
begin
set @FirstChar=substring(@AllChar,0,@FirstPoint)
set @returnChar=@returnChar+case when len(@FirstChar)=1 then '000 '+@FirstChar when len(@FirstChar)=2 then '00 '+@FirstChar when len(@FirstChar)=3 then '0 '+@FirstChar else @FirstChar end
set @AllChar=substring(@AllChar,@FirstPoint+1,@lenth)
set @FirstPoint=charindex( '- ',@AllChar)
end
return @returnChar
end


select dbo.fun_name( '3-10-1 ')