mysql行转列

  • 先利用group, group_concat将要转化的行转成字符串
  • 然后用字符截取实现
    • SUBSTRING_INDEX
      • SUBSTRING_INDEX(‘要截取的字符串’ , ‘分隔符’ , ‘计数’)
    • CHAR_LENGTH 字符长度
    • SUBSTRING(‘要截取的字符串’ , ‘截取开始位置’ )
-- 创建一个字符串截取处理函数
CREATE FUNCTION SPLIT_STR(x VARCHAR(255),delim VARCHAR(12),pos INT)  
   RETURNS VARCHAR(255)  
   RETURN SUBSTRING(SUBSTRING_INDEX(x, delim, pos), CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 2);  

-- 具体查询
SELECT 
	SUBSTRING_INDEX(GROUP_CONCAT(heroname), ',', 1) hero1,
	SPLIT_STR(GROUP_CONCAT(heroname), ',', 2) hero2,
	SPLIT_STR(GROUP_CONCAT(heroname), ',', 3) hero3,
	SPLIT_STR(GROUP_CONCAT(heroname), ',', 4) hero4,
	SPLIT_STR(GROUP_CONCAT(heroname), ',', 5) hero5,
	SPLIT_STR(GROUP_CONCAT(heroname), ',', 6) hero6
FROM hero
GROUP BY matchid
  • 解释
	比如 GROUP_CONCAT(heroname) 结果为 '劫,阿木木,努努,阿卡丽,艾希,盖伦'
	那么
		SUBSTRING_INDEX(GROUP_CONCAT(heroname), ',', 1)的结果是 劫
		SUBSTRING_INDEX(GROUP_CONCAT(heroname), ',', 2)的结果是 劫,阿木木
		SUBSTRING_INDEX(GROUP_CONCAT(heroname), ',', 3)的结果是 劫,阿木木,努努
	SPLIT_STR(GROUP_CONCAT(heroname), ',', 3) 就是相当于
	SUBSTRING('劫,阿木木,努努' , CHAR_LENGTH('劫,阿木木')+2)
	SUBSTRING('劫,阿木木,努努' , 7) 结果就是 努努
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值