no-image

SQLite3 で 1 Query で BOOL 値の toggle

SQLite3 で BOOL 値を扱うとき、SQLite3 には BOOLEAN 型がないので INTEGER で代用することになる。

0 を false, 1 を true とするときに、例えば

  • 現在の値が 0 なら 1 にセット
  • 現在の値が 1 なら 0 にセット

としたいときがあると思う。

現在の値を確認するために、まず "SELECT ..." で値を読み込んで、その値から判断して "UPDATE ..." とすると、2 Queries になってしまう。

Making an sql "toggle" using a single query?」を参考に

UPDATE table SET flag = flag + 1 % 2 WHERE id = 127;

と剰余を使ってできた。他の SQL 環境では MOD 関数を使って

MOD(flag + 1, 2)

のような感じなるだろう。