字符拆分排列组合

现有若干数字,将所有的排列组合可能均显示出来.
例如:4个数字
1,2,3,4
1
2
3
4
1,2
1,3
1,4
2,3
2,4
3,4
1,2,3
1,2,4
1,3,4
2,3,4
1,2,3,4
如何存储不限.

 

-->蓉儿

select top 100 id=identity(int,1,1) into # from sysobjects
declare @s nvarchar(100)
set @s='1,2,3,4'
select col=substring(@s,id,charindex(',',@s+',',id)-id)
into #1
from #
where charindex(',',','+@s,id)=id

insert #1 select @s

while @@rowcount>0
insert #1
select distinct left(col,len(col)-1)
from
(
   
select col=stuff(replace(','+b.col+',',','+a.col+',',','),1,1,'')
   
from #1 a,#1 b
   
where charindex(','+a.col+',',','+b.col+',')>0 and a.col<>b.col
) t
where left(col,len(col)-1) not in (select col from #1)


select * from #1 order by len(col)
/*
col
---------
1
2
3
4
1,2
1,3
1,4
2,3
2,4
3,4
1,2,3
1,2,4
1,3,4
2,3,4
1,2,3,4

(15 行受影响)
*/
drop table #
drop table #1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值