急!!!SQL SERVER 按位与 的问题

edmund_z 2005-03-08 04:47:43
有两个字符串型字段a,b
a b
11 110
01 011
需要把两个字段后面补0变成20位,然后进行 按位与 的操作
SQL SERVER能实现吗?????
...全文
518 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
子陌红尘 2005-03-09
  • 打赏
  • 举报
回复
SQL Server中不直接用二进制表示binary数据,通常都是转为十六进制表示。

楼主的要求恐怕无法直接得到答案,不过可以通过使用自定义函数变通实现:
-------------------------------------------------------------------

--创建专用处理函数:
create function f_bin(@v varchar(20))
returns int
as
begin
declare @i int
declare @r int
set @v = left(@v+'00000000000000000000',20)
set @i = 1
set @r = 0
while(len(@v)>0)
begin
select @r = @r + (case substring(@v,1,4)
when '0000' then 0
when '0001' then 1
when '0010' then 2
when '0011' then 3
when '0100' then 4
when '0101' then 5
when '0110' then 6
when '0111' then 7
when '1000' then 8
when '1001' then 9
when '1010' then 10
when '1011' then 11
when '1100' then 12
when '1101' then 13
when '1110' then 14
when '1111' then 15
end) * power(16,5-@i)
set @v = stuff(@v,1,4,'')
set @i = @i + 1
end
return @r
end

--执行查询
select dbo.f_bin(a)&dbo.f_bin(b) from 表
miehailing 2005-03-09
  • 打赏
  • 举报
回复
我认为可以这样:
1.先补足20位 A=A+REPLICATE('0',20-LEN(A)),B=B+REPLICATE('0',20-LEN(B))
2.在循环逐位取ASCII值
declare @i int, @s varchar(20)
set @i=1
set @s=''
while i<=20
begin
SET @S=@S+CHAR((ASCII(SUBSTRING(A,i,1)))&(ASCII(SUBSTRING(B,i,1))))
SET @I=@I+1
end
SELECT @S
NewQger 2005-03-09
  • 打赏
  • 举报
回复
好多天不来,水一贴
关注
yesyesyes 2005-03-09
  • 打赏
  • 举报
回复
是算ip吗?
edmund_z 2005-03-08
  • 打赏
  • 举报
回复
主要是字符串如何转换成二进制然后在进行 & 操作
子陌红尘 2005-03-08
  • 打赏
  • 举报
回复
按位运算符
位运算符可用于 int、smallint 或 tinyint 数据。~(按位 NOT)运算符还可用于 bit 数据。所有位运算符对一个或多个指定的整型值在 Transact-SQL 语句中转换为二进制表达式时执行计算。例如,~(按位 NOT)运算符将二进制 1 变为 0 而将 0 变为 1。若要检查位运算,请转换或计算十进制数值。

例如,要将 150 与 75 相加,而且不只对十进制数值 225 感兴趣,还要使用二进制算法(0 和 1 的加法)。为此请使用按位 AND 运算符 (&)。

若要存储整数(象前面提到的 150 和 75 这样的普通十进制数值)并要执行内部转换来进行二进制数学运算,请使用位运算符。位运算符还可用于在不需要精确求反的情况下获得非值。


&(按位 AND)

~(按位 NOT)

|(按位 OR)

^(按位互斥 OR)

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧