自定义函数实现位操作

问题1:两个01组成的字符串,需要实现与运算。比如两个字符串分别是000111011001和010011010011,需要求他们的与,结果是000011010001

/************************************************/
/*    字符串与操作                        */
/* 版本:   1.0                                  */
/* 作者: Haiwer                                 */
/* 版权所有                                     */
/* 调用事例:select dbo.fn_and('000111011001','010011010011')                  */
/* 2007.07.21整理                               */
/************************************************/
CREATE function [dbo].[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
 

 问题2:有表tab数据如下

ID Val

A 3
A 2
A 1
B 4
B 2
C 1
C 2
C 8
C 16
B 32

求每个id的聚合或,要求的结果如下

ID Val

A 3                 --3 or 2 or 1 =3
B 38              --4 or 2 or 32=38
C 27              -- 1 or 2 or 8 or 16=27

用函数实现

/************************************************/
/*    聚合或操作函数                        */
/* 版本:   1.0                                  */
/* 作者: Haiwer                                 */
/* 版权所有                                     */
/* 调用事例:                                         */
/* select id,[dbo].[fn_聚合或](id) as 聚合或 from tab group by id */
/* 2007.07.21整理                               */
/************************************************/
create function [dbo].[fn_聚合或](
@id varchar(10)
)
returns int
as
begin
   declare @r int
   set @r=0
   select @r=@r | val from tab where id=@id
   return @r
end

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值