3

1 つのテーブルにバイナリ ビットをフラグとして使用するフィールドがあるデータベースを用意します。そのため、どのフラグが切り替えられているかによって、さまざまな値を持つ可能性があるため、値だけを見るのは役に立ちません。つまり、8 より大きい値は、8 の値が使用されていることを意味しません (たとえば、17 は 16 + 1 です)。

これを念頭に置いて、複数のレコードを更新して、特定のフィールドのビット (値 8 など) を設定または設定解除する方法はありますか? 設定されているレコードと設定されていないレコードがあるため、単純に 8 を加算 (または減算) したくありません。

4

2 に答える 2

4

ビットごとの OR|および AND&関数を使用できます。

UPDATE myTable SET myValue = value |  8;   -- set bit 3
UPDATE myTable SET myValue = value & ~8;   -- clear bit 3

テスト用の (非常に) シンプルな SQLfiddle

于 2013-02-23T23:23:37.873 に答える
3

BIT 関数を使用します。ビット 1 を設定するには:

update your_table
set bit_field = bit_field | b'0001'

ビット 1 を設定解除するには:

update your_table
set bit_field = bit_field & b'1110'

SQLFiddle デモ

于 2013-02-23T23:20:23.070 に答える