mysql 异或

sex 字段只有两个取值:'f' 和 'm' 。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)

方式一:异或

UPDATE salary
SET sex = CHAR(ASCII(sex) ^ ASCII('m') ^ ASCII('f'));

两个相等的数异或的结果为 0,而 0 与任何一个数异或的结果为这个数。

sex 字段只有两个取值:'f' 和 'm',并且有以下规律:

'f' ^ ('m' ^ 'f') = 'm' ^ ('f' ^ 'f') = 'm'
'm' ^ ('m' ^ 'f') = 'f' ^ ('m' ^ 'm') = 'f'

因此将 sex 字段和 'm' ^ 'f' 进行异或操作,最后就能反转 sex 字段。

方式二:if

UPDATE salary
SET sex = IF(sex = 'm', 'f', 'm');

方式三:CASE WHEN

UPDATE salary
SET sex = CASE sex
    WHEN "m" THEN "f"
    ELSE "m"
END;

方式四: ascii加减

UPDATE salary
SET sex = CHAR(ascii('m') + ascii('f') - ascii(sex));
DROP TABLE IF EXISTS salary;

CREATE TABLE salary (
    id INT,
    NAME VARCHAR(100),
    sex CHAR(1),
    salary INT
);

INSERT INTO salary (id, NAME, sex, salary)
VALUES ('1', 'A', 'm', '2500'),
    ('2', 'B', 'f', '1500'),
    ('3', 'C', 'm', '5500'),
    ('4', 'D', 'f', '50000');
原文地址:https://www.cnblogs.com/ooo0/p/15189166.html