SQL查询的时候想实现下面这种效果要怎么做

1723601892231.jpg

FineReport yzmfKZXQ1464691 发布于 2024-8-14 10:18
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
用户k6280494Lv6资深互助
发布于2024-8-14 10:35
使用递归CTE(MySQL 8.0及以上)

从MySQL 8.0开始,你可以使用递归的公用表表达式(CTE)来更优雅地处理这个问题。

sql复制代码

WITH RECURSIVE cte AS (
SELECT  
1 AS n,
SUBSTRING_INDEX(SUBSTRING_INDEX('张三,李四,王五', ',', 1), ',', -1) AS name
UNION ALL  
SELECT  
n + 1,
SUBSTRING_INDEX(SUBSTRING_INDEX('张三,李四,王五', ',', n + 1), ',', -1)
FROM cte
WHERE n < (LENGTH('张三,李四,王五') - LENGTH(REPLACE('张三,李四,王五', ',', '')))
)
SELECT name FROM cte;

请注意,你需要将'张三,李四,王五'替换为你的实际字段或变量,并且可能需要动态地计算递归的次数(如示例中的WHERE子句所示)。

方法3:使用自定义函数(适用于任何MySQL版本)

如果你经常需要执行这种操作,并且希望代码更加清晰和可重用,你可以考虑编写一个自定义函数来分割字符串。但是,这通常比上述方法更复杂,并且需要你对MySQL的存储过程和函数有深入的了解。

结论

根据你的MySQL版本和需求选择最合适的方法。如果你正在使用MySQL 8.0或更高版本,并且喜欢简洁的查询,那么递归CTE可能是最佳选择。如果你使用的是早期版本,那么你可能需要依赖于数字表或自定义函数。

最佳回答
0
CovidLv3高级互助
发布于2024-8-14 10:19

啥数据库?

  • yzmfKZXQ1464691 yzmfKZXQ1464691(提问者) mysql
    2024-08-14 10:21 
  • Covid Covid 回复 yzmfKZXQ1464691(提问者) 这个不会。你参考https://blog.csdn.net/weixin_40692789/article/details/140597942 先按逗号拆分后再查询(SELECT PRESS,SUM(SL) SL FROM ( 拆分SQL))
    2024-08-14 10:23 
最佳回答
0
yzm165943Lv3见习互助
发布于2024-8-14 10:32

帆软不太好实现,通过sql的形式实现,具体参考https://www.jb51.net/database/3218933o6.htm

  • 3关注人数
  • 168浏览人数
  • 最后回答于:2024-8-14 10:35
    请选择关闭问题的原因
    确定 取消
    返回顶部