以下のようなテーブルがあるとします。
statusの値は10進数ですが、アプリケーションではビット演算で管理されてることがわかると思います。
id:1, status:1 // 1つめのフラグが立っている
id:2, status:4 // 3つめのフラグが立っている
id:3, status:1023 // 全てのフラグが立っている
SQLでの書き方
3つめのフラグが立っているかどうかのクエリーは以下になります。
xxx.sql
SELECT * FROM xxx WHERE (status & 4) = 4;
idが2,3が出力されます。
Sequelize.whereを使った書き方
xxx.ts
Model.findAll({
where: sequelize.where(sequelize.literal('status & 1023'), 1023)
})
参考
https://github.com/sequelize/sequelize/issues/5207
https://lambdalisue.hatenablog.com/entry/2013/12/22/041347
https://sequelize.org/master/manual/model-querying-basics.html