• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

[急]如何实现二进制字符串按位"与"的操作?

smartyyp 2006-10-25 03:37:14
例如:
declare @A1='10000000001111111111'
declare @A2='11000000001111001111'
如何做按位"与"的操作,得到'10000000001111001111'

有没有这样的高效自定义函数?

注:不能用SQL自带的"&",因为我的字符串太长有几百位,不能传换成int
...全文
291 点赞 收藏 11
写回复
11 条回复
Well 2006年10月28日
自己写一个function
回复 点赞
xyxfly 2006年10月28日
to:i9988(冒牌j9988 V0.3)


函数的效率一直是问题


这个有没有什么说法的?
回复 点赞
i9988 2006年10月28日
没有高招,函数的效率一直是问题
回复 点赞
marco08 2006年10月26日
學習
回复 点赞
smartyyp 2006年10月25日
如果数据量大(100000),而且二进制的位数在500位怎么办
回复 点赞
i9988 2006年10月25日
函数是没效率可言的,所以除非必要而且数据量不大,才用函数

函数改进效率的余地不大

回复 点赞
smartyyp 2006年10月25日
写成函数为什么执行效率这么低
回复 点赞
i9988 2006年10月25日
注意:
结果长度以第一个串长度决定,如果第二个串长度小于第一个串,不足的位都是返回0,如果第二个串长度大于第一个串,只返回第一个串长度的串

回复 点赞
pdgzzgx 2006年10月25日
都是对的 我学习了
回复 点赞
九斤半 2006年10月25日
declare @A1 nvarchar(2000),@A2 nvarchar(2000)
set @A1='10000000001111111111'
set @A2='11000000001111001111'

declare @i int,@result nvarchar(2000)
select @i=1,@result=''

while @i<=len(@A1)
begin
if substring(@A1,@i,1)=1 and substring(@A2,@i,1)=1
set @result=@result+'1'
else
set @result=@result+'0'

set @i=@i+1
end

print @result
回复 点赞
i9988 2006年10月25日
自己写

create function fn_And(
@A1 varchar(300),
@A2 varchar(300)
)
returns varchar(300)
as
begin
declare @r varchar(300)
set @r=''
while len(@A1) >0
begin
set @r=@r+cast(cast(left(@A1,1) as tinyint) & cast(left(@A2,1) as tinyint) as varchar)
set @A1=stuff(@A1,1,1,'')
set @A2=stuff(@A2,1,1,'')
end
return @r
end

--调用
declare @A1 varchar(300)
set @A1='10000000001111111111'
declare @A2 varchar(300)
set @A2='11000000001111001111'

select dbo.fn_and(@a1,@a2)

--结果

-------------------------------------------------------------------------------------10000000001111001111

(所影响的行数为 1 行)

回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告