concat函数/substring_index/case-when实际场景运用

本文介绍了MySQL中concat、substring_index和case-when函数的实际应用。在项目中,通过这些函数成功将URL格式从'[GET]/api/v1/volume'转换为JSON格式,并根据display_name字段的值进行汉字操作,如将'create'转换为'创建','delete'转换为'删除'。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

干货汇总,实际问题解决

如有帮助,欢迎留下足迹哦!

目录

函数说明

使用场景

操作


函数说明

substring_index(str,delim,count) :str待处理的字符串,  delim分隔符,  count计数

concat用于连接几个字符串

case when用于根据不同的值进行不同的操作

使用场景

项目中遇到一个表数据的修改场景,修改前长这样:

WITH RECURSIVE MenuPathCTE AS ( -- 基础查询:找到输入ID对应的菜单项 SELECT id, parent_id, path, meta_title, CAST(id AS VARCHAR(255)) AS full_path_ids, -- 用于拼接ID路径的临时列 SUBSTRING_INDEX(SUBSTRING(meta_title, 11), '"', 1) AS title_part -- 提取meta_title的指定部分 FROM sys_menu WHERE id = 03011201 -- 输入的ID UNION ALL -- 递归部分:查找当前菜单项的子菜单项 SELECT m.id, m.parent_id, m.path, m.meta_title, CONCAT(mp.full_path_ids, ' -> ', CAST(m.id AS VARCHAR(255))) AS full_path_ids, -- 拼接ID路径 -- 拼接提取的meta_title部分,注意这我们可能不需要再次从第十一位开始提取,而是直接取m.meta_title的指定部分 CONCAT( COALESCE(mp.title_part, ''), ' -> ', CASE WHEN INSTR(SUBSTRING(m.meta_title, 11), '"') > 0 THEN SUBSTRING_INDEX(SUBSTRING(m.meta_title, 11), '"', 1) ELSE SUBSTRING(m.meta_title, 11) END ) AS title_part FROM sys_menu m INNER JOIN MenuPathCTE mp ON m.parent_id = mp.id --我们不再需要WHERE子句来过滤path,因为我们想要递归地包含所有子菜单项以便提取title_part ) -- 最终选择结果:找到path不为空的菜单项,并返回拼接好的数据 SELECT id, parent_id, path, full_path_ids AS concatenated_ids_path, GROUP_CONCAT(title_part ORDER BY CHAR_LENGTH(full_path_ids) - CHAR_LENGTH(REPLACE(full_path_ids, ' -> ', '')) DESC SEPARATOR ' -> ') AS concatenated_title_parts FROM MenuPathCTE WHERE path IS NOT NULL -- 只选择path不为空的项 GROUP BY id, parent_id, path, full_path_ids -- 根据需要分组的列进行分组 ORDER BY full_path_ids; -- 根据拼接的ID路径排序 那错了
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProblemTerminator

您的鼓励将是作者最大的动力哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值