mysql截取字符

前言:整理图书数据,由于图书数据之前没有经过人工矫正爬取完成后直接导入数据库而且数据源很多,无奈只好整理数据。

错误数据展示:
小马宝莉2018年第2集(总第16集)【大师计划】(4月刊)
李敖回忆录(大师珍藏版)【当当全国独家】
【正版全新直发】宫泽贤治小森林童话:水仙月四日 宫泽贤治,田诚 绘,彭懿 海豚传媒出品 长江少年儿童出版社9787556078530

正常应显示数据:
小马宝莉
李敖回忆录
宫泽贤治小森林童话:水仙月四日

其实说白了就是MySql截取字符
下面是我的一些思路,欢迎大佬指定提出更优方案
在此附上MySql中文文档地址

一、MySQL函数之SUBSTR()

1.简介

先看下这个SUBSTR(); 其实给的提示很明显 str 就是string字符呗varchar类型
pos就是postion呗int类型,下面挨个试一下
mysql截取字符_第1张图片
1.substr( str:varchar , pos:int )

select BOOK_NM
from   ma_book
where  ID = 1788925;
【正版全新直发】宫泽贤治小森林童话:水仙月四日 宫泽贤治,田诚 绘,彭懿 海豚传媒出品 长江少年儿童出版社9787556078530

字符串截取这个函数很多语言都有,但细节有偏差。mysql这个是以1为起始值

select SUBSTR(BOOK_NM,1)
from   ma_book
where  ID = 1788925;
【正版全新直发】宫泽贤治小森林童话:水仙月四日 宫泽贤治,田诚 绘,彭懿 海豚传媒出品 长江少年儿童出版社9787556078530
select SUBSTR(BOOK_NM,INSTR(BOOK_NM,'】')+1)
from   ma_book
where  ID = 1788925;
宫泽贤治小森林童话:水仙月四日 宫泽贤治,田诚 绘,彭懿 海豚传媒出品 长江少年儿童出版社9787556078530

2.substr( str:varchar from pos:int )
这个没什么说的和上面的用法一样只是逗号换成了from

select SUBSTR(BOOK_NM FROM INSTR(BOOK_NM,'】')+1)
from   ma_book
where  ID = 1788925;
宫泽贤治小森林童话:水仙月四日 宫泽贤治,田诚 绘,彭懿 海豚传媒出品 长江少年儿童出版社9787556078530

3.substr( str:varchar , pos:int , len:int)
len就是length长度呗,指的是截取的长度

select SUBSTR(BOOK_NM , INSTR(BOOK_NM,'】')+1 ,10)
from   ma_book
where  ID = 1788925;
从第九个开始截取十个
宫泽贤治小森林童话:

4.substr( str:varchar from pos:int for len:int )
同理只是换了种写法

select SUBSTR(BOOK_NM FROM INSTR(BOOK_NM,'】')+1 FOR 10)
from   ma_book
where  ID = 1788925;
宫泽贤治小森林童话:

2.小结

字符串截取常用函数,和其他语言的字符串截取差不多没什么特殊之处

二、MySQL函数之SUBSTRING()

1.简介

上个SUBSTR()的兄弟单位,如下图4个方法一模一样直接看第5个
mysql截取字符_第2张图片
substring_index(str:varchar , delim:varchar , count:int)
delim 即分割符,新知识点,下面我试一下

#以分隔符】为例当count为0时结果集为0
select SUBSTRING_INDEX(BOOK_NM , '】' ,0)
from ma_book
where ID = 1788925;
#以分隔符】为例当count为1时结果集为分割符左边所有字符
select SUBSTRING_INDEX(BOOK_NM , '】' ,1)
from ma_book
where ID = 1788925;
【正版全新直发
#以分隔符】为例当count大于1时结果集为原值
select SUBSTRING_INDEX(BOOK_NM , '】' ,2)
from ma_book
where ID = 1788925;
【正版全新直发】宫泽贤治小森林童话:水仙月四日 宫泽贤治,田诚 绘,彭懿 海豚传媒出品 长江少年儿童出版社9787556078530
#以分隔符】为例当count等于-1时结果集为分割符右边所有字符
select SUBSTRING_INDEX(BOOK_NM , '】' ,-1)
from ma_book
where ID = 1788925;
宫泽贤治小森林童话:水仙月四日 宫泽贤治,田诚 绘,彭懿 海豚传媒出品 长江少年儿童出版社9787556078530
#以分隔符】为例当count小于-1时结果集为原值
select SUBSTRING_INDEX(BOOK_NM , '】' ,-2)
from ma_book
where ID = 1788925;
【正版全新直发】宫泽贤治小森林童话:水仙月四日 宫泽贤治,田诚 绘,彭懿 海豚传媒出品 长江少年儿童出版社9787556078530

小结

比兄弟单位SUBSTR()多了一个
substring_index(str:varchar , delim:varchar , count:int)

三、MySQL函数之TRIM()

简介

trim(),可不仅仅只能去空格
mysql截取字符_第3张图片
1.trim(str:varchar)
去掉左右空格
2.trim([{both | leading | trailing}] [remstr:varchar] from str:varchar)
去掉两边、左边、右边限定符
3.Ltrim(str:varchar)
去掉左边空格
4.Rtrim(str:varchar)
去掉右边空格

#1.去掉字符串最左边的限定符【正版全新直发】
select trim(LEADING '【正版全新直发】' FROM BOOK_NM )
from ma_book
where ID = 1788925;
宫泽贤治小森林童话:水仙月四日 宫泽贤治,田诚 绘,彭懿 海豚传媒出品 长江少年儿童出版社9787556078530
#2.去掉字符串最右边的限定符【正版全新直发】
select trim(TRAILING'【正版全新直发】' FROM BOOK_NM )
from ma_book
where ID = 1788925;
#3.去掉字符串两边的限定符【正版全新直发】
select trim(BOTH '【正版全新直发】' FROM BOOK_NM )
from ma_book
where ID = 1788925;

小结

trim([{both | leading | trailing}] [remstr:varchar] from str:varchar),
是一大亮点,今天在去空格时偶然发现还有这个方法。

四、MySQL之REGEXP

五、正文数据处理

未完待续。。。

你可能感兴趣的:(mysql)