加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

管道运算符在SQL中做了什么?

发布时间:2020-12-12 16:22:11 所属栏目:MsSql教程 来源:网络整理
导读:我正在重新开发一个应用程序,并找到了这个sql语句,什么是|字符做这部分(au.ExNetBits | 8),我以前没见过,在网上找不到任何答案? SELECT au.AccountID,au.ExNetBits FROM AccountUser au(NOLOCK) au.CDAGUserId = 102和(au.ExNetBits | 8)= au.ExNetBits 解决
我正在重新开发一个应用程序,并找到了这个sql语句,什么是|字符做这部分(au.ExNetBits | 8),我以前没见过,在网上找不到任何答案?

SELECT au.AccountID,au.ExNetBits FROM AccountUser au(NOLOCK)
au.CDAGUserId = 102和(au.ExNetBits | 8)= au.ExNetBits

解决方法

| SQL管道中的(管道)运算符是 bitwise or运算符.

在这种用法中,它正在测试以确保在按位或按位后列的值保持不变.执行相同操作的另一种方法是使用按位和运算符(&)来屏蔽所讨论的位并针对掩码进行测试.

我个人发现并且更加惯用而不是方法,但那就是我.

一个SQL小提琴演示结果:http://sqlfiddle.com/#!6/aeb46/4

小提琴的内容是:

create table foo (bits integer);

insert into foo values (1),(2),(3),(4),(5),(6),(7),(8),(9)

select bits from foo where (bits | 2) = bits;
select bits from foo where (bits | 8) = bits;

select bits from foo where (bits & 2) = 2;
select bits from foo where (bits & 8) = 8;

对2的查询返回2,3,6,7,而对8的查询返回8,9.

如果你真的想要,那么8位的设置测试也可以这样做:

select bits from foo where (bits / 8) % 2 = 1

但这只是愚蠢的一面,但它的确有效.

在不使用C风格的按位运算符的语言中,通常有类似的功能来执行按位工作.例如,在Oracle中,可以使用BITAND和BITOR(参见oracle文档中的BITAND,了解如何使用它) – &在Oracle SQL中,dialect是参数和||的指示用于字符串连接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读