为了账号安全,请及时绑定邮箱和手机立即绑定

2-6里面的截取方法貌似看懂了,求指点

这句话是这样的:

replace(substring(substring_index(mobile,',',a.id),char_length(substring_index(mobile,',',a.id-1))+1),',','') as mobile

从外到内是:

1.把【substring(substring_index(mobile,',',a.id),char_length(substring_index(mobile,',',a.id-1))+1)】中的逗号替换为空;

2.把【substring_index(mobile,',',a.id)】这个字符串,从第【char_length(substring_index(mobile,',',a.id-1))+1】个字符开始截取,直到末尾;

3.【substring_index(mobile,',',a.id)】这个字符串表示把mobile按逗号分隔,从第a.id个逗号算起,获取左侧字符串;

4.【char_length(substring_index(mobile,',',a.id-1))+1】要从里面的【substring_index(mobile,',',a.id-1)】说起;

5.【substring_index(mobile,',',a.id-1)】表示把mobile按逗号分隔,从第a.id-1个逗号算起,获取左侧字符串,这里比3中的字符串总是少了一个电话号码(少算一个逗号);

6.【char_length(substring_index(mobile,',',a.id-1))+1】是要计算【substring_index(mobile,',',a.id-1)】的长度,+1是因为5比3多截了一个逗号;

    比如:原本mobile = 电1,电2,电3

             substring_index(mobile, ',', 2) = 电1,电2

             substring_index(mobile, ',', 1) = 电1

7.现在问题相当于是(接着上面的例子):replace(substring('电1,电2', len(电1)+1), ',', ''),结果为'电2'。也就说 id 为多少就截取第几个电话号码。


对于最终表格:

user_name 是直接从 CROSS JOIN 表里选出来的,因此也有那么多行,而每行其实也有对应的 id (也是没变,但因为没有SELECT所以看不见)

而 mobile 则是用 id 值(隐藏)进行 replace 语句替换后的结果(别名)


# 老师一句“简单的截取转换……” 结果我想了快一个小时

正在回答

举报

0/150
提交
取消

2-6里面的截取方法貌似看懂了,求指点

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信