CREATE FUNCTION F_ww2 (@mula varchar(100),@prioritydata varchar(20))
RETURNS varchar(100)
AS
begin
declare @priority varchar(10),@thepriority int
while charindex('-',@prioritydata)>0
begin
declare @workmula varchar(50)
select @priority=left(@prioritydata,charindex('-',@prioritydata)-1),@prioritydata=stuff(@prioritydata,1,charindex('-',@prioritydata),'')
set @workmula=@mula
while(@priority)>1
begin
set @priority=@priority-1
set @workmula=stuff(@workmula,PATINDEX('%[-+*/]%',@workmula),1,'~')
end
set @thepriority= PATINDEX('%[-+*/]%',@workmula)
declare @var varchar(50),@work varchar(50), @vv varchar(2),@llrr int,@workint int,@printvar varchar(100)
select @vv = '',@llrr=0,@workint=0
select @var=substring(@mula,@thepriority+1,len(@mula))+'/',@work=@var
while len(@work)>0
begin
set @workint=@workint+1
select @vv=left(@work,1),@work = right(@work,len(@work)-1)
set @llrr=@llrr+case when @vv='(' then 1 when @vv=')' then -1 else 0 end
if (@llrr=0)
begin
set @printvar=stuff(@var,@workint+PATINDEX('%[-+*/]%',@work),0,')')
set @work=''
end
end
select @var='/'+substring(@mula,1,@thepriority-1),@work=@var,@workint=len(@var)
while len(@work)>0
begin
select @vv=right(@work,1),@work = left(@work,len(@work)-1)
set @llrr=@llrr+case when @vv=')' then 1 when @vv='(' then -1 else 0 end
if (@llrr=0)
begin
set @mula =stuff(@var,@workint-PATINDEX('%[-+*/]%',REVERSE(@work))+1,0,'(')+ substring(@workmula,@thepriority,1) + @printvar
set @work=''
end
set @workint=@workint-1
end
set @mula= substring(@mula,2,len(@mula)-2)
end
RETURN @mula
end
print dbo.F_ww2('1/2/3/4/5/6/7','1-6-3-5-2-4')
--多数组合
--随便组了一下五个数字下的组合~~~发现有70多万条!!!所以不打算写下去了~~此需求到此结束