| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 561 人关注过本帖
标题:[分享]刚无聊,写的一个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
快速回复:[分享]刚无聊,写的一个Sp
数据加载中...
 
   



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

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