sql语句 字符串 二进制 位运算

独醒子 2009-06-29 10:31:22
sql语句(sqlserver2000)

是否有位运算?如何进行位运算?字符串如何转化为二进制

如:有表数据如下
id 字段1 字段2
1 11001100 11110000

要求得到下面的结果
1、与 运算:11000000
2、或 运算:11111100

该如何做,表中字段都是字符串
...全文
735 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
独醒子 2009-06-30
  • 打赏
  • 举报
回复
谢谢4楼的大哥 结贴



。。。我怎么没想到在sql里写个函数。郁闷
--小F-- 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ai_li7758521 的回复:]
SQL codecreate function bin2dec(@s varchar(255) )
--二进制转化为十进制
returns int
as
begin
declare @i int, @temp char(1), @result int
select @i=1
select @result=0
while (@i<=len(@s))
begin
select @temp=substring(@s,@i,1)
select @result=@result+ (ascii(@temp)-48)*power(2,len(@s)-@i)
selec…
[/Quote]

学习了
chuifengde 2009-06-29
  • 打赏
  • 举报
回复
给一个字符操作的函数:
CREATE FUNCTION fn_CalcBin(@cN1 VARCHAR(8000),@cN2 VARCHAR(8000),@Sign VARCHAR(5))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @Result VARCHAR(8000)
DECLARE @M INT
DECLARE @TMaxc VARCHAR(8000),@TMinc VARCHAR(8000)
DECLARE @i INT

IF ISNULL(@cN1,'')='' OR ISNULL(@cN2,'')=''
SET @Result=ISNULL(@cN1,'')+ISNULL(@cN2,'')
ELSE
BEGIN
SELECT @M=CASE WHEN LEN(@cN1)>LEN(@cN2) THEN LEN(@cN1) ELSE LEN(@cN2) END,
@TMaxc=CASE WHEN LEN(@cN1)>LEN(@cN2) THEN @cN1 ELSE @cN2 END,
@TMinc=CASE WHEN LEN(@cN1)>LEN(@cN2) THEN REPLICATE('0',LEN(@cN1)-LEN(@cN2))+@cN2
ELSE REPLICATE('0',LEN(@cN2)-LEN(@cN1))+@cN1 END

SELECT @i=1,@Result=''
WHILE @i<=@M
BEGIN
SET @Result=@Result+
CASE WHEN @Sign='&' THEN
LTRIM(CAST(SUBSTRING(@TMaxc,@i,1) AS INT) & CAST(SUBSTRING(@TMinc,@i,1) AS INT))
WHEN @Sign='|' THEN
LTRIM(CAST(SUBSTRING(@TMaxc,@i,1) AS INT) | CAST(SUBSTRING(@TMinc,@i,1) AS INT))
WHEN @Sign='^' THEN
LTRIM(CAST(SUBSTRING(@TMaxc,@i,1) AS INT) ^ CAST(SUBSTRING(@TMinc,@i,1) AS INT))
END
SET @i=@i+1
END
END

RETURN @Result
END

GO

SELECT dbo.fn_CalcBin('11001100' ,'11110000','&') [与],
dbo.fn_CalcBin('11001100' ,'11110000','|') [或],
dbo.fn_CalcBin('11001100' ,'11110000','^') [异或]

--result
/*与 或 异或
------------------------------ ------------------------------ ------------------------------
11000000 11111100 00111100

(所影响的行数为 1 行)*/
zimu312500 2009-06-29
  • 打赏
  • 举报
回复
只有转换程十进制后才能进行这些操作吗?
drysea 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ai_li7758521 的回复:]
SQL codecreate function bin2dec(@s varchar(255) )
--二进制转化为十进制
returns int
as
begin
declare @i int, @temp char(1), @result int
select @i=1
select @result=0
while (@i<=len(@s))
begin
select @temp=substring(@s,@i,1)
select @result=@result+ (ascii(@temp)-48)*power(2,len(@s)-@i)
selec…
[/Quote]

ai_li7758521 2009-06-29
  • 打赏
  • 举报
回复
create function bin2dec(@s varchar(255) ) 
--二进制转化为十进制
returns int
as
begin
declare @i int, @temp char(1), @result int
select @i=1
select @result=0
while (@i<=len(@s))
begin
select @temp=substring(@s,@i,1)
select @result=@result+ (ascii(@temp)-48)*power(2,len(@s)-@i)
select @i=@i+1
end
return @result
end

create function dec2bin(@n int )
--十进制转化为二进制
returns varchar(255)
as
begin
declare @i int,@temp int, @s varchar(255)
set @i=@n
set @s=''
while (@i>0)
begin
set @temp=@i % 2
set @i=@i /2
set @s=ltrim(@temp)+@s
end
return @s
end


select [位与]=dbo.dec2bin(dbo.bin2dec(11001100)&dbo.bin2dec(11110000))

位与
-------------------
11000000

select [位或]=dbo.dec2bin(dbo.bin2dec(11001100)|dbo.bin2dec(11110000))

位或
------------------
11111100
--小F-- 2009-06-29
  • 打赏
  • 举报
回复
& 按位与
| 按位或
csdyyr 2009-06-29
  • 打赏
  • 举报
回复
& (Bitwise AND)

~ (Bitwise NOT)

| (Bitwise OR)

^ (Bitwise Exclusive OR)
--小F-- 2009-06-29
  • 打赏
  • 举报
回复
转换为text或者ntext型的 ?

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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