在mysql 中可以使用if()
函数实现类似于程序中if else 流程的功能。
语法结构
if(condition, value_true, value_false)
if()函数有三个参数:
- condition: 条件。
- value_true: 条件true时的值。
- value_false:条件false时的值。
例子
通过if()函数可以实现if else 的功能,比如用户表中有一个gender字段,其中1为男2为女,我们可以使用if()函数实现。
mysql> select id, name, if(gender = '1', '男', '女') as gender from user;
+----+--------+--------+
| id | name | gender |
+----+--------+--------+
| 1 | 张三 | 男 |
| 2 | 李四 | 女 |
| 3 | 王五 | 女 |
| 4 | 赵六 | 男 |
+----+--------+--------+
4 rows in set (0.00 sec)
有时候性别用户可能不填,所以gender字段还有个可能的值3 即,
1 男 2女 3未知
那么此时可以使用mysql if ()函数的嵌套使用,如下:
mysql> select id, name, if(gender = '1', '男', if(gender='2','女','未知') ) as gender from user;
+----+--------+--------+
| id | name | gender |
+----+--------+--------+
| 1 | 张三 | 男 |
| 2 | 李四 | 女 |
| 3 | 王五 | 女 |
| 4 | 赵六 | 未知 |
+----+--------+--------+
4 rows in set (0.00 sec)
以上嵌套的方法虽然可能实现我们的功能,但是显得有点繁琐,接下来介绍mysql类似于 程序流程中switch case的方法。
测试sql
表结构
CREATE TABLE `user` (
`id` int(10) NOT NULL,
`name` varchar(20) CHARACTER SET utf8 NOT NULL COMMENT '名字',
`password` varchar(40) CHARACTER SET utf8 NOT NULL COMMENT '密码',
`status` char(1) CHARACTER SET utf8 DEFAULT NULL COMMENT '状态',
`mobile` char(11) CHARACTER SET utf8 DEFAULT NULL COMMENT '手机号',
`add_time` int(10) DEFAULT NULL COMMENT '新增日期',
`gender` char(1) CHARACTER SET utf8 DEFAULT NULL COMMENT '1男2女3未知',
`age` int(10) DEFAULT NULL COMMENT '年龄',
`uuid` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'uuid测试外键',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_mobile` (`mobile`) USING BTREE COMMENT '手机号',
UNIQUE KEY `idx_uuid` (`uuid`) USING BTREE COMMENT 'uuid',
KEY `idx_status` (`status`) USING BTREE COMMENT '状态',
KEY `idx_add_time` (`add_time`) USING BTREE COMMENT '新增日期',
KEY `idx_gender_age` (`gender`,`age`) USING BTREE COMMENT '性别和年龄联合索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
表数据
INSERT INTO `yxjc`.`user`(`id`, `name`, `password`, `status`, `mobile`, `add_time`, `gender`, `age`, `uuid`) VALUES (1, '张三', '123456', '1', NULL, 1579142334, '1', 22, '111');
INSERT INTO `yxjc`.`user`(`id`, `name`, `password`, `status`, `mobile`, `add_time`, `gender`, `age`, `uuid`) VALUES (2, '李四', '123456', '1', '13133333333', 1673836735, '2', 23, '222');
INSERT INTO `yxjc`.`user`(`id`, `name`, `password`, `status`, `mobile`, `add_time`, `gender`, `age`, `uuid`) VALUES (3, '王五', '123456', '0', '13155555555', 1736995134, '2', 24, '333');
INSERT INTO `yxjc`.`user`(`id`, `name`, `password`, `status`, `mobile`, `add_time`, `gender`, `age`, `uuid`) VALUES (4, '赵六', '123456', '0', '13156666666', 1736995136, '3', 25, '444');