如何查询对比 谢谢表1
ID 相关
1 ABBBBAAAABBABBAB
2 BBABABABAAAABABABBAB
...............
条件见A放B 见B放A
见AAAA停止 等到出现B时继续开始
见BBBB停止 等到出现A时继续开始如正确用1代表 错误用2代表 如停止用3代表,
例如上面表11 ABBBBBAAAABBABBAB第1个开始
A 放入B 出现AB 结果正确 记录为1
继续
AB 放入A 出现ABB 结果错误 记录为2
继续
ABB 放入A 出现ABBB 结果错误 记录为2
继续
ABBB 放入A 出现ABBBB 结果错误 记录为2
继续
ABBBB 停止 出现ABBBBB 记录为3
继续
ABBBBB 停止 出现ABBBBBA 记录为3
继续
ABBBBBA 此时出现A了,继续放入B对比 出现ABBBBBAA 结果错误 记录为2
.................
得结果ID 新
1 1222332......
2 2111111122231......
ID 相关
1 ABBBBAAAABBABBAB
2 BBABABABAAAABABABBAB
...............
条件见A放B 见B放A
见AAAA停止 等到出现B时继续开始
见BBBB停止 等到出现A时继续开始如正确用1代表 错误用2代表 如停止用3代表,
例如上面表11 ABBBBBAAAABBABBAB第1个开始
A 放入B 出现AB 结果正确 记录为1
继续
AB 放入A 出现ABB 结果错误 记录为2
继续
ABB 放入A 出现ABBB 结果错误 记录为2
继续
ABBB 放入A 出现ABBBB 结果错误 记录为2
继续
ABBBB 停止 出现ABBBBB 记录为3
继续
ABBBBB 停止 出现ABBBBBA 记录为3
继续
ABBBBBA 此时出现A了,继续放入B对比 出现ABBBBBAA 结果错误 记录为2
.................
得结果ID 新
1 1222332......
2 2111111122231......
见A放B 见B放A ,你结果中的1、2是怎么来的
returns varchar(8000)
as
begin
declare @c varchar(1000)
declare @temp varchar(1000)
declare @b int
set @b =1
set @c =''
while (@b<len(@a))
begin
set @temp = left(@a,@b)
if right(@temp,4) not in('BBBB','AAAA')
begin
if (right(@temp,1)='A')
begin
set @temp = @temp +'B'
end
else
begin
set @temp = @temp +'A'
end
end
if right(@temp,4)='BBBB' or right(@temp,4)='AAAA'
begin
set @c = @c + '3'
end
else if @temp = left(@a,@b+1)
begin
set @c = @c + '1'
end
else
begin
set @c = @c + '2'
end
set @b = @b+1
end return @c
end----------------------------
select pubs.dbo.ABConvert('BBABABABAAAABABABBAB')
--------------------------------------------------------------------------------------------------
2111111122231111211(所影响的行数为 1 行)
create function dbo.ABConvert(@a varchar(1000))
returns varchar(8000)
as
begin
declare @c varchar(1000)
declare @temp varchar(1000)
declare @b int
set @b =1
set @c =''
while (@b<len(@a))
begin
set @temp = substring(@a,@b,len(@a))--借用7楼的!这里用substring应该更合适吧
if right(@temp,4) not in('BBBB','AAAA')
begin
if (right(@temp,1)='A')
begin
set @temp = @temp +'B'
end
else
begin
set @temp = @temp +'A'
end
end
if right(@temp,4)='BBBB' or right(@temp,4)='AAAA'
begin
set @c = @c + '3'
end
else if @temp = left(@a,@b+1)
begin
set @c = @c + '1'
end
else
begin
set @c = @c + '2'
end
set @b = @b+1
end return @c
end----------------------------
select dbo.ABConvert('BBABABABAAAABABABBAB')