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