• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 通过SQL Server的位运算功能巧妙解决多选查询方法

通过SQL Server的位运算功能巧妙解决多选查询方法

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了位运算,多选查询等相关知识,希望本文的分享对您有所帮助

项目中很多业务对象的数据表中都具有Status字段,有人使用int型保存Status,有人使用varchar型

无论使用int还是varchar,对于Status的多选查询都是不易应对的。举例,常规思维下对CustomerStatus的Enum设置如下:
代码如下:
[Serializable]
public enum CustomerStatus
{
New = 0,
Active = 1,
Overdue = 2,
Suspended = 3,
Closing = 4,
Closed = 5
}

在数据库中以int形式存储了Status值。
如果我在页面中想一次搜索状态为Active,Overdue和Suspended状态的Customer,该怎么办?程序是不是得把这三个状态值
拼成字符串传递给SQL去处理?虽然能实现,但是相当低效。

现在给出一个标准解决方案:
(1). 所有可能被用作搜索条件的枚举都应按如下位运算方式定义。
代码如下:
public enum CustomerStatus
{
New = 1,
Active = 1<<1,
Overdue = 1<<2,
Suspended = 1<<3,
Closing = 1<<4,
Closed = 1<<5
}

(2). 在数据库设计时,Status的字段必须为int型。
这样当我们做多选查询时@Status的Value= CustomerStatus.Active | CustomerStatus. Overdue| CustomerStatus. Suspended

(3). 查询语句如下:
代码如下:
Select *
From Customer
Where [Status] & @Status = [Status]

如果@Status可为null时,
代码如下:
Select *
From Customer
Where ( @Status is null Or [Status] & @Status = [Status])

用这样一条简单的语句,就可以获取到所有符合@Status要求的数据行。
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MySQL笔记之运算符使用详解
  • 通过SQL Server的位运算功能巧妙解决多选查询方法

相关文章

  • 2018-12-05SQLSERVER中union,cube,rollup,cumpute运算符使用说明
  • 2018-12-05关于集合长度的10篇文章推荐
  • 2017-05-11MySQL行级锁、表级锁、页级锁详细介绍
  • 2017-05-11MySQL中字段名和保留字冲突的解决办法
  • 2018-12-05mysql自动获取时间日期的方法
  • 2018-12-05MySQL安装之编码设置的图文详解
  • 2018-12-05配置mysql允许远程连接的方法
  • 2017-05-11Mysql的游标的定义使用及关闭深入分析
  • 2018-12-05mysql 5.7.15 安装配置方法图文教程_MySQL
  • 2018-12-05数据库查询优化方法

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Oracle9iPL/SQL编程的经验小结
    • MYSQL批量插入数据如何优化的方法介绍
    • mysql中如何去除小数点后面多余的0
    • 重装MS SQL Server 2000前必须彻底删除原安装文件的方法
    • MSSQL优化之探索MSSQL执行计划(转)
    • 详细介绍MongoDB常用的操作
    • 深入理解MySQL中的事务机制
    • mysql操作sql的小技巧的详情介绍
    • 浅析MySQL的注入安全问题
    • 解析MySQL创建外键关联错误 - errno:150

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有