sql中的case when的使用
1.测试建表脚本
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(128) NOT NULL DEFAULT '' COMMENT '用户名',
`gender` char(1) NOT NULL DEFAULT '' COMMENT '性别',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户表';
INSERT INTO `user` VALUES (1,'root1','男'),(2,'root2','男'),(3,'root3','女'),(4,'root4','女'),(5,'root5','0');
2.case when具体使用
表中原有数据
MariaDB [test]> select t1.id,t1.username , t1.gender from user t1;
+----+----------+--------+
| id | username | gender |
+----+----------+--------+
| 1 | root1 | 男 |
| 2 | root2 | 男 |
| 3 | root3 | 女 |
| 4 | root4 | 女 |
| 5 | root5 | 0 |
+----+----------+--------+
5 rows in set (0.000 sec)
Case具有两种格式:简单Case函数和Case搜索函数。
显然,简单Case函数生在简洁,但是它只适用于这种单字段的单值比较,而Case搜索函数的优点在于适用于所有比较的情况。
# 简单Case函数
MariaDB [test]> select t1.id , t1.username , case when t1.gender='男' then 1 when t1.gender='女' then 2 else '未知' end as 性别 from user t1;
+----+----------+------+
| id | username | 性别 |
+----+----------+------+
| 1 | root1 | 1 |
| 2 | root2 | 1 |
| 3 | root3 | 2 |
| 4 | root4 | 2 |
| 5 | root5 | 未知 |
+----+----------+------+
5 rows in set (0.000 sec)
# Case搜索函数。
MariaDB [test]> select t1.id , t1.username , case t1.gender when '男' then 1 when '女' then 2 else '未知' end as 性别 from user t1;
+----+----------+------+
| id | username | 性别 |
+----+----------+------+
| 1 | root1 | 1 |
| 2 | root2 | 1 |
| 3 | root3 | 2 |
| 4 | root4 | 2 |
| 5 | root5 | 未知 |
+----+----------+------+
5 rows in set (0.000 sec)
3.总结
这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。