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');