首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Server :按位或分开的字段

Server :按位或分开的字段
EN

Stack Overflow用户
提问于 2017-10-13 16:00:15
回答 2查看 835关注 0票数 2

我不是DB专家,也不确定在查询我的表时哪种方法最好。

我有一个表Availability,它包含一周的时间,一个特定的用户可以工作。

我像这样定义了我的模型

代码语言:javascript
运行
复制
     monday: {
      type: Sequelize.BOOLEAN,
      allowNull: false,
      defaultValue: false,
    },
    tuesday: {
      type: Sequelize.BOOLEAN,
      allowNull: false,
      defaultValue: false,
    },
    wednesday: {
      type: Sequelize.BOOLEAN,
      allowNull: false,
      defaultValue: false,
    },
    thursday: {
      type: Sequelize.BOOLEAN,
      allowNull: false,
      defaultValue: false,
    },
    friday: {
      type: Sequelize.BOOLEAN,
      allowNull: false,
      defaultValue: false,
    },
    saturday: {
      type: Sequelize.BOOLEAN,
      allowNull: false,
      defaultValue: false,
    },
    sunday: {
      type: Sequelize.BOOLEAN,
      allowNull: false,
      defaultValue: false,
    },

现在,我想知道,在查询所有可用的用户时,例如在星期一,如果有一个包含按位整数的列,这样我就可以使用Server中的OR按位运算符添加所有值并对其进行查询,这样会不会更快呢?

(谢谢你的帮助:)

朱利安。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-13 16:26:24

你是在问这是否可能,还是一个好办法?

我在作业调度工具上做了大量工作,我的团队使用SQL Server中的SQL代理作业调度器作为开始的基础。在本文中,SQL调度程序将计划存储在一个表中,其中一些列被编码为对它们使用按位操作。

因为一周只有7天,所以可以使用tinyint数据类型(1字节=8位)来存储这些可用性数据。

代码语言:javascript
运行
复制
Ob01000000 could be Monday = 64
0b00100000 could be Tuesday = 32
etc.

然后当你在查询中提取数据时.

代码语言:javascript
运行
复制
WHERE Availability.AvailableDays | 64 = 64

会给你周一工作的人。

就我个人而言,我喜欢这种方法来解决这类问题。

票数 2
EN

Stack Overflow用户

发布于 2017-10-13 16:45:06

在内部,Server将位列实现为Server中的字节块。

Server数据库引擎优化了位列的存储。如果表中有8位或更少的位列,则将这些列存储为1字节。如果有9到16位列,则列存储为2个字节,依此类推。

BOL源

我建议使用bit列。数据库为您执行所有的按位操作,这样您就可以编写方便且易于阅读的筛选条件,如where [wednesday] = 1

此外,架构本身防止在整数列(如tinyintsmallint )中设置无效值的任何尝试。例如,假设您设置了一个允许7位的tinyint列。这将值限制在0到127之间。需要检查约束才能防止设置最顶层位的人,并防止值介于128到255之间(包括在内)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46733817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档