比如 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
....
即中间分隔符‘-’是不确定有多少级,有两级、三级 、四级都有可能,希望用函数实现!
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
....
即中间分隔符‘-’是不确定有多少级,有两级、三级 、四级都有可能,希望用函数实现!
解决方案 »
- 请教一个存储过程
- 如何用Sql實現以下表,請大俠們幫忙
- 特殊分类查询(求存储过程)
- Using 'xpsqlbot.dll' version '2000.80.194' to execute extended stored procedure 'xp_qv'. 是什么信息?
- 在数据库设计表的列时我把(金额)设成为FLOAT数值类型,这样的不好处是什么?
- ssh连接服务器
- SQL的机密问题
- 日期格式输出控制?在线等等!!谢谢!!
- 困扰我的问题:连库需要两次才能成功,为什么?
- Finding SQL servers that does not broadcast on the LAN
- 请教一个关于向ntext字段写入整篇英文文章的问题
- 紧急求助!存储过程的问题:动态sql返回数据集问题
returns varchar(100)
as
begin
return '000'+replace(@str,'-','00')
end
GOprint dbo.fn070208('3-10-1')
drop function fn070208
结果
00030010001
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
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
endselect dbo.fun_name('3-10-1')
----------
0003 0010 0001
select dbo.fun_name('0030-100-010')---------------
0030 0100 0010
10-11-10 格式后是什么样 格式化后应该是 001000110010
3-1 格式化成 00030001
3-10-1 格式化成 00030010001
10-1 格式化成 0010001
其中: 3-10-1 格式化成 00030010001 是写错了,应该是 000300100001
10-1 格式化成 0010001 应该是00100001看的真仔细:)
你这个也有点问题,比如 3-110-1 就应该是000301100001
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
PRINT dbo.fn_Format('3-10',3)
PRINT dbo.fn_Format('3-10-1',3)
结果:
---------------
0002
00030010
00030010001