MySQL: простой способ переключения значения поля int - PullRequest
45 голосов
/ 02 марта 2009

Я знаю, как это сделать, но я думаю, что я усложню это двойным выбором и так далее.

Как вы можете это сделать (пример в псевдо-sql)

UPDATE some_table SET an_int_value = (an_int_value==1 ? 0 : 1);

Это должно быть значение типа int из-за некоторых других функций, но как вам это сделать простым способом?

Ответы [ 9 ]

101 голосов
/ 22 сентября 2009
UPDATE table SET field = 1 - field
77 голосов
/ 02 марта 2009
UPDATE some_table SET an_int_value = IF(an_int_value=1, 0, 1);

http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if

15 голосов
/ 02 марта 2009
UPDATE some_table SET an_int_value = IF(an_int_value=1, 0, 1)
9 голосов
/ 02 марта 2009

В этом случае вы можете использовать операцию типа XOR:

UPDATE some_table SET an_int_value = an_int_value XOR 1

Предполагается, что an_int_value всегда будет 1 или 0, хотя.

4 голосов
/ 24 августа 2010

Я могу видеть ответы всех опытных людей, и я тоже получил обновления с их ответами.

что по этому поводу ... я делаю так ...

UPDATE tablename SET fieldname = not fieldname

Может ли любой орган дать предложения, если это не будет возможным решением. в отношении скорости выполнения или любой другой ... что сказать ... факт ... концепция ....

2 голосов
/ 02 марта 2009

Другой вариант:

UPDATE some_table SET an_int_value = ABS(an_int_value - 1);
1 голос
/ 15 марта 2019

Если вы используете TINYINT (0 и 1), просто выполните XOR (https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html#operator_xor)

)
UPDATE
    `some_table`
SET
    `an_int_value` = `an_int_value` ^ 1

Тестирование:

ВЫБРАТЬ 0 ^ 1; / * возвращает 1 * /

ВЫБРАТЬ 1 ^ 1; / * возвращает 0 * /

0 голосов
/ 02 апреля 2015

для ENUM (0,1) ОБНОВЛЕНИЕ some_table SET an_int_value = IF (an_int_value = '1', '0', '1');

0 голосов
/ 12 ноября 2012

Для полей ENUM (0,1) вы можете использовать ...

Таблица обновлений SET int_value = BINARY (int_value = 1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...