将不确定变为确定~SQLSERVER是否可以进行位运算?
有时,我们在设计表结构时,有的字段可能同时具有几种状态,如小微自己的文件属性也是属于这种情况的,“只读,归档,隐藏”,但你对一个文件设置属性时,事实上是可以将这三个属性同时赋予一个对象的,这对于我们来说是正常的,那程序内部是怎么实现的呢?
首先一个枚举,SQL里可能是一张表,也可能是事先规定好的几个值,如: 只读1,归档2,隐藏3
再没有看.net源代码时,我认为可能是这样存储的
文件属性为只读+归档,值为:1,2
我们看到它是用,分开的,然后再分别去求和就可以了
但当我看了.net源代码后,我的作法有了一个变化,那就是利用位移运算,应该说从性能到程序清晰度上有一个飞跃
文件属性为只读+归档,值为:3 (3=1+2)
当然我们需要在数据库中查询出包含归档(2)的属性的记录时,如何去实现呢
其实,SQL与C#里的位移运算符号是完全相同的,它有以下几种情况
1 update User_Info set Status = Status | 8 where UserID = 1 --更新user_info里的status字段,在原有基础上增加8 2 3 update User_Info set Status = Status & (~8) where UserID = 1 --更新user_info里的status字段,在原有基础上减去8,如果原来的值中不包含8,那会在原来的值上加上8 4 5 select * from User where Status & 8 >0 --找到所到包括8的记录
呵呵,怎么样,挺方便吧,这只是表面的,事实上,它在查询上性能也远远高于第一种拼接字符的方法。
分类:
数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2011-08-10 LINQ~什么时候使用SelectMany和GroupBy
2011-08-10 自己提出的程序开发三大原则:代码简洁,结构清晰,合理运用