mysql返回值concat函数拼接,if函数,CASE WHEN函数条件判断。

时间:2022-12-08 15:58:03


今天遇到一个sql的查询,需要把sql处理好返给前端展示,
既有条件判断又要拼接返回结果,这里记录一下。

sql:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for lgs_operation_task_rules
-- ----------------------------
DROP TABLE IF EXISTS `lgs_operation_task_rules`;
CREATE TABLE `lgs_operation_task_rules` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`site_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '站点id',
`is_initialization` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否是初始化数据;是否是初始化数据0:否1:是',
`task_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '任务名称',
`task_rules` tinyint(3) NOT NULL DEFAULT 0 COMMENT '运维周期;0:每隔x天1:每月2:每隔x月3:每半年4:每年',
`date_interval` tinyint(3) NULL DEFAULT NULL COMMENT '日期间隔;日期间隔:允许输入0和正整数',
`reminder_date` tinyint(3) NULL DEFAULT NULL COMMENT '提前提醒天数;仅支持输入0与正整数。',
`executive_role` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '人员类别;0:硬件支持人员,1:软件支持人员,2:全部',
`task_describe` varchar(900) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述',
`subtask` json NULL COMMENT '子任务',
`is_disable` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否禁用0:否,1:是',
`DEL_FLAG` tinyint(4) NOT NULL DEFAULT 0 COMMENT '删除状态;0:有效,1:无效',
`CREATED_BY` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
`CREATED_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`UPDATED_BY` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人',
`UPDATED_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`ID`) USING BTREE,
INDEX `site_id`(`site_id`) USING BTREE,
INDEX `DEL_FLAG`(`DEL_FLAG`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 29 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '运维任务规则' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of lgs_operation_task_rules
-- ----------------------------
INSERT INTO `lgs_operation_task_rules` VALUES (1, NULL, 1, '定时重启123456', 7, 7, 13, '6', '系统默认,不可修改!放屁', 'true', 0, 0, NULL, '2022-08-19 00:00:00', NULL, '2022-08-19 00:00:00');
INSERT INTO `lgs_operation_task_rules` VALUES (2, NULL, 1, '年度drp', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:10:56', NULL, '2022-08-19 15:41:29');
INSERT INTO `lgs_operation_task_rules` VALUES (3, NULL, 1, '备份检查', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:12:05', NULL, '2022-08-19 15:41:35');
INSERT INTO `lgs_operation_task_rules` VALUES (4, NULL, 1, '服务器巡检', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:12:30', NULL, '2022-08-19 15:41:42');
INSERT INTO `lgs_operation_task_rules` VALUES (5, '105', 1, '定时重启', 0, 7, 3, '2', '系统默认,不可修改!', '{\"url\": \"http://www.bejson.com\", \"name\": \"BeJson\", \"page\": 88, \"links\": [{\"url\": \"http://www.google.com\", \"name\": \"Google\"}, {\"url\": \"http://www.baidu.com\", \"name\": \"Baidu\"}, {\"url\": \"http://www.SoSo.com\", \"name\": \"SoSo\"}], \"address\": {\"city\": \"江苏苏州\", \"street\": \"科技园路.\", \"country\": \"中国\"}, \"isNonProfit\": true}', 0, 0, NULL, '2022-08-19 15:40:42', NULL, '2022-09-01 18:33:07');
INSERT INTO `lgs_operation_task_rules` VALUES (6, '105', 1, '年度drp', 3, 30, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:40:42', NULL, '2022-09-01 18:33:29');
INSERT INTO `lgs_operation_task_rules` VALUES (7, '105', 1, '备份检查', 1, 1, 3, '1', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:40:42', NULL, '2022-09-01 18:22:46');
INSERT INTO `lgs_operation_task_rules` VALUES (8, '105', 1, '服务器巡检', 2, 30, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:40:42', NULL, '2022-09-01 18:33:25');
INSERT INTO `lgs_operation_task_rules` VALUES (12, '2', 1, '定时重启', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:53:35', NULL, '2022-08-19 15:53:35');
INSERT INTO `lgs_operation_task_rules` VALUES (13, '2', 1, '年度drp', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:53:35', NULL, '2022-08-19 15:53:35');
INSERT INTO `lgs_operation_task_rules` VALUES (14, '2', 1, '备份检查', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:53:35', NULL, '2022-08-19 15:53:35');
INSERT INTO `lgs_operation_task_rules` VALUES (15, '2', 1, '服务器巡检', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:53:35', NULL, '2022-08-19 15:53:35');
INSERT INTO `lgs_operation_task_rules` VALUES (19, '4', 1, '定时重启', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:59:33', NULL, '2022-08-19 15:59:33');
INSERT INTO `lgs_operation_task_rules` VALUES (20, '4', 1, '年度drp', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:59:33', NULL, '2022-08-19 15:59:33');
INSERT INTO `lgs_operation_task_rules` VALUES (21, '4', 1, '备份检查', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:59:33', NULL, '2022-08-19 15:59:33');
INSERT INTO `lgs_operation_task_rules` VALUES (22, '4', 1, '服务器巡检', 0, 7, 3, '0', '系统默认,不可修改!', NULL, 0, 0, NULL, '2022-08-19 15:59:33', NULL, '2022-08-19 15:59:33');

SET FOREIGN_KEY_CHECKS = 1;

if函数

IF(expr, v1, v2)函数
如果expr成立,返回值为v1,否则返回v2
if(1<2,‘yes’,‘no’)

SELECT
otr.task_name,
otr.task_describe,
IF
( otr.is_disable = 0, '已启用', '已禁用' ) AS is_disable
FROM
lgs_operation_task_rules otr
WHERE
otr.site_id = 105

mysql返回值concat函数拼接,if函数,CASE WHEN函数条件判断。

CASE WHEN 多个判断条件

CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END

该函数表示,如果expr值等于某个vn,则返回对应位置THEN后面的结果。如果与所有值都不相等,则返回ELSE后面的rn。

SELECT
otr.task_name,
otr.task_describe,
CASE

WHEN otr.executive_role = 0 THEN
'硬件支持人员'
WHEN otr.executive_role = 1 THEN
'软件支持人员' ELSE '全部'
END AS role
FROM
lgs_operation_task_rules otr
WHERE
otr.site_id = 105

mysql返回值concat函数拼接,if函数,CASE WHEN函数条件判断。

MySQL的concat函数可以连接一个或者多个字符串

concat 等同于字符串连接符 ||,concat(字串1, 字串2, 字串3, …),将字串1、字串2、字串3,等字串连在一起。
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

SELECT
otr.task_name,
otr.task_describe,
CONCAT( "提前", otr.reminder_date, "天" ) AS reminder_date
FROM
lgs_operation_task_rules otr
WHERE
otr.site_id = 105

mysql返回值concat函数拼接,if函数,CASE WHEN函数条件判断。

结合使用

SELECT
otr.task_name,
otr.task_describe,
CASE

WHEN otr.task_rules = 0 THEN
CONCAT( "每隔", otr.date_interval, "天" )
WHEN otr.task_rules = 1 THEN
CONCAT( "每隔", otr.date_interval, "月" )
WHEN otr.task_rules = 3 THEN
'每半年' ELSE '每年'
END AS cycle,
CONCAT( "提前", otr.reminder_date, "天" ) AS reminder_date,
CASE

WHEN otr.executive_role = 0 THEN
'硬件支持人员'
WHEN otr.executive_role = 1 THEN
'软件支持人员' ELSE '全部'
END AS role,
IF
( otr.is_disable = 0, '已启用', '已禁用' ) AS is_disable
FROM
lgs_operation_task_rules otr
WHERE
otr.site_id = 105

mysql返回值concat函数拼接,if函数,CASE WHEN函数条件判断。