登录
首页 >  数据库 >  MySQL

day5 性别变更

来源:SegmentFault

时间:2023-01-27 13:55:22 202浏览 收藏

小伙伴们有没有觉得学习数据库很有意思?有意思就对了!今天就给大家带来《day5 性别变更》,以下内容将会涉及到MySQL、数据库,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

本题使用的是 MySQL8.0,没有在 MySQL5.6 版本中测验过,不保证正确。

题目

题目来源:性别变更

将所有数据

create table salary (
    id int primary key,
    name varchar(255),
    sex varchar(255),
    salary int
)

insert into salary values
(1, 'A', 'm', 2500),
(2, 'B', 'f', 1500),
(3, 'C', 'm', 5500),
(4, 'D', 'f', 500);

SQL:方法一

update salary set sex = case sex when 'm' then 'f' else 'm' end;

解析

如果

update salary set sex = if(sex = 'm', 'f', 'm');

解析

思路和方法一一样

这是使用

update salary set sex = char(ascii(sex) ^ ascii('m') ^ ascii('f'));

解析

每一个字母都对应一个

ascii
,使用
ascii()
就可以把字母转换成
ascii

在利用异或,相同的数为

0
0
和任何数进行异或都是那个数。

再利用

char
ascii
码转换成字母

具体的步骤:

  • ascii('m')
    109
    ascii('f')
    102
  • ascii('m') ^ ascii('m') ^ ascii('f')
    ,所以转化成
    109 ^ 109 ^ 102
    109
    109
    异或为
    0
    0
    102
    异或为
    102
    ,在用
    char(102)
    得出结果为
    m
  • ascii('f') ^ ascii('m') ^ ascii('f')
    ,所以转化成
    102 ^ 109 ^ 102
    ,可以交换下
    109
    102
    的位置,所以
    102
    102
    异或为
    0
    0
    109
    异或为
    109
    ,在用
    char(109)
    得出结果为
    f

更多解题参考:https://github.com/astak16/bl...

今天关于《day5 性别变更》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表