一、概念
功能描述: 判断数据显示代表的含义(类似java if)
语法:
CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
二、实战
创建和数据
CREATE TABLE `user` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT 'id',
`account` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '账号',
`password` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
`status` bit(1) NULL DEFAULT NULL COMMENT '状态:1正常,0禁用',
`create_date` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',
`update_date` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间'
)
INSERT INTO `user` VALUES (1, 'lanys', '123', b'1', '2022-06-10 11:03:34', '2022-06-10 11:03:34');
INSERT INTO `user` VALUES (2, 'Tom', '123', b'1', '2022-06-10 11:03:35', '2022-06-10 11:03:35');
INSERT INTO `user` VALUES (3, 'David', '111', b'0', '2022-06-10 11:03:38', '2022-06-10 11:03:38');
案例一
需求: 将数据表中账号信息状态用中文展示(状态:1 -> 正常, 0-> 禁用)。
实现效果:
语句:
SELECT id,account,PASSWORD,
( CASE STATUS WHEN 1 THEN '正常' WHEN 0 THEN '禁用' ELSE NULL END ) AS STATUS
FROM `user`
案例二
需求: 将表数据根据创建时间(create_date)排序统计做了什么(类似时间线)。
实现效果:
语句:
SELECT create_date,
CONCAT_WS(
',',
CONCAT( '创建账号account:', account ),
CONCAT( '密码password:', PASSWORD ),
CONCAT( '账号状态:', CASE STATUS WHEN 1 THEN '正常' WHEN 0 THEN '禁用' ELSE NULL END )
) AS line_info
FROM `user` ORDER BY create_date