SQL Server : bitwise or separate fields

标签 sql sql-server bitwise-operators

我不是数据库专家,并且不确定在查询我的表时哪种方法是最好的。

我有一个表Availability,其中包含特定用户每周可以工作的天数。

我已经这样定义了我的模型

     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,
    },

现在,我想知道,当涉及到查询所有可以工作的用户(例如)时,这不是更快吗?星期一,拥有一个包含按位整数的列,以便我可以通过添加所有值来插入它,并使用 SQL Server 中的 OR 按位运算符对其进行查询?

感谢您的帮助:)

朱利安。

最佳答案

您是在问这是否可能或者是否是一个好的方法?

我在作业调度工具方面做了大量工作,我的团队使用 SQL Server 中的 SQL 代理作业调度程序作为开始的基础。在幕后,SQL 代理调度程序将调度存储在表中,并对某些列进行编码以对它们使用按位运算。

由于一周只有 7 天,您可以使用 tinyint 数据类型(1 字节 = 8 位)来存储此可用性数据。

Ob01000000 could be Monday = 64
0b00100000 could be Tuesday = 32
etc.

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

WHERE Availability.AvailableDays | 64 = 64

将为您提供周一工作的任何人。

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

关于SQL Server : bitwise or separate fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46733817/

相关文章:

sql - 查找最近的日期,Firebird dBase

SQL 查询 : Which one should i use? 计数 ("columnname") 或计数 (1)

ruby-on-rails - Rails 使用 MS SQL Server 数据库

python - 位运算和 == 与 != 运算符

php - MySQL 按位非操作没有返回所需的值

python - while 循环会执行多少次?

php - 如何在一列mysql中放置多个关系ID?

java - MyBatis:选择一个Map进行映射

sql - 如何使用非唯一外键强制数据库完整性?

c# - 制作通用方法来更新 Entity Framework 多对多导航属性