记一次MySQL数据截取
前言
由于某些原因要提取工单标题中的人员英文名,通过SQL截取快速筛选数据
一、数据样式
数据示例:
[系统自动触发]Apple是一个大帅帅帅哥
[系统自动触发]peanut是一个大帅帅帅哥
······
要求:取出英文Apple,peanut
截取数据分析
- 字符串前缀固定8位:[系统自动触发]
- 字符串后缀固定8位:是一个大帅帅帅哥
- 中间英文长度不确定
分析:
1、从左边9开始始截取结束:peanut是一个大帅帅帅哥
2、从左边1开始截取到(长度-8)
二、分析处理
1.MySQL截取函数
代码如下(示例):
1、left(str,index) 从左边第index开始截取
select left('[系统自动触发]peanut是一个大帅帅帅哥', 11);
2、right(str,index)从右边第index开始截取
select right('[系统自动触发]peanut是一个大帅帅帅哥', 11);
3、substring(str,index)当index>0从左边开始截取直到结束 当index<0从右边开始截取直到结束 当index=0返回空
select substring('[系统自动触发]peanut是一个大帅帅帅哥', 11)
4、substring(str,index,len) 截取str,从index开始,截取len长度
select substring('[系统自动触发]peanut是一个大帅帅帅哥', 9,5)
5、substring_index(str,delim,count),str是要截取的字符串,delim是截取的字段 count是从哪里开始截取(为0则是左边第0个开始,1位左边开始第一个选取左边的,-1从右边第一个开始选取右边的
select substring_index('[系统自动触发]peanut是一个大帅帅帅哥', 'p',1)
select substring_index('[系统自动触发]peanut是一个大帅帅帅哥', 'p',-1)
6、subdate(date,day)截取时间,时间减去后面的day
select subdate(SYSDATE(),1)
7、subtime(expr1,expr2) 时分秒expr1-expr2
SELECT subtime(SYSDATE(),'1:1:1')
2.数据长度获取函数
length: 是计算字段的长度一个汉字是算三个字符,一个数字或字母算一个字符
SELECT LENGTH('[系统自动触发]peanut是一个大帅帅帅哥')
CHAR_LENGTH(str) 返回值为字符
SELECT CHAR_LENGTH('[系统自动触发]peanut是一个大帅帅帅哥')
结果
SELECT substring('[系统自动触发]peanut是一个大帅帅帅哥',9,(CHAR_LENGTH('[系统自动触发]peanut是一个大帅帅帅哥') -16))
总结
MySQL的函数还是挺多的,这次处理数据用了数据截取substring,字段长度CHAR_LENGTH