标题:[分享]刚无聊,写的一个Sp
只看楼主
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
 问题点数:0 回复次数:4 
[分享]刚无聊,写的一个Sp

create procedure sp_Sep(@a varchar(10))
as
begin
declare @count_1 int
declare @count_2 int

create table #temp
(
id int identity(1,1),
unit char(1)
)
set @count_1=len(@a)
set @count_2=1


declare @mysql varchar(2000)
set @mysql='declare @number'+convert(varchar,@count_2)+' nchar(1) '
while @count_2<@count_1
begin
set @count_2=@count_2+1
set @mysql=@mysql+'declare @number'+convert(varchar,@count_2)+' nchar(1) '
end

set @mysql=@mysql+'declare @a varchar(10) set @a='''+convert(varchar,@a)+''''

set @count_2=1
while @count_2<=@count_1
begin
set @mysql=@mysql+' set @number'+convert(varchar,@count_2)+'=substring(@a,'+convert(varchar,@count_2)+',1)'
set @count_2=@count_2+1
end


set @count_2=1
while @count_2<=@count_1
begin
set @mysql=@mysql+'insert into #temp(unit) select @number'+convert(varchar,@count_2)+' '
set @count_2=@count_2+1
end
set @mysql=@mysql+'select * from #temp'

exec(@mysql)

drop table #temp
end

功能并不复杂,可以用于分解字符串(够无聊吧
测试时可以用下面语句
exec sp_Sep 'a1c2b3'
由于在Sp内作了限定,只能分解10个字符以下的字符串(要更长的话自己做点小改动就是了)

本来做这个东西是看CSDN上有人要一个能给出不定长字符串全排列的SQL语句时想到的(那个BT),但是全排列的逻辑好像不是T-SQL能完成的,放弃了,这个算是副产品吧

搜索更多相关主题的帖子: 分享 
2006-06-03 14:56
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
得分:0 

忽然想起一个很简单的写法

create procedure f_Sep(@a varchar(10))
as
declare @b table
(id int identity(1,1),
unit char(1)
)


declare @c int
set @c=1

while @c<=len(@a)
begin
insert into @b
values(substring(@a,@c,1))
set @c=@c+1
end

select *
from @b


2006-06-03 17:36
flatter
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2006-5-3
得分:0 
楼主请问一下,要使这个ID显示从000001开头6位编码,应该怎样实现?
2006-06-07 16:15
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
得分:0 

set nocount on
declare @a varchar(10)
declare @b table
(id varchar(6),
unit char(1)
)
declare @c int
set @a='bcdefg'
set @c=1

while @c<=len(@a)
begin
insert into @b
select right('00000'+cast((select isnull(max(id),0)+1 from @b) as varchar),6),(substring(@a,@c,1))
set @c=@c+1
end

select *
from @b
set nocount off

执行一下看了就知道了


2006-06-07 16:43
flatter
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2006-5-3
得分:0 
多谢!真高!
2006-06-14 10:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-69525-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.147138 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved