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