首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请教这样一组数据怎么格式化,希望用函数实现!进来看看,在DELPHI里面函数实现了,但在SQL 里面函数怎样写呢

2012-01-16 
请问这样一组数据如何格式化,希望用函数实现!进来看看,在DELPHI里面函数实现了,但在SQL 里面函数怎样写呢?

请问这样一组数据如何格式化,希望用函数实现!进来看看,在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 ')


----------
0003 0010 0001

[解决办法]
CREATE FUNCTION fn_Format(@S nvarchar(100),@Len int)
RETURNS nvarchar(100)
AS
BEGIN
DECLARE @Temp nvarchar(50)
SET @S=RIGHT(POWER(10,@Len),@Len)+@S
SET @Temp=RIGHT(POWER(10,@Len-1),@Len-1)
RETURN REPLACE(@S, '- ',@Temp)
END
GO
SELECT dbo.fn_Format( '2 ',3)
SELECT dbo.fn_Format( '3-10 ',3)
SELECT dbo.fn_Format( '3-10-1 ',3)
DROP FUNCTION fn_Format

热点排行