在日常运维的过程中,经常需要写一些脚本来进行一些数据记录处理的操作,例如一个记录中的列,有的是4个(包含空列),有的是5个,这种情况下,需要对其中的某些列值进行处理,在这些脚本中,常常会用到很多关于字符串的函数,今天把这些字符串处理函数简单整理下,后续如果想实现一些脚本,可以直接拿来用。
1.获取字符串字符数和字符串长度的函数
首先弄清楚两个概念,字符串字符数和字符串长度,字符数是指字符串所包含的的字符个数,字符串长度指的是包含的字节个数。char_length是统计字符数的函数,而length是统计字符串长度的函数,下面来看实例:
1root@localhost:3306 [(none)]>select char_length('egg'),char_length('鸡蛋'); 2+--------------------+-----------------------+ 3| char_length('egg') | char_length('鸡蛋') | 4+--------------------+-----------------------+ 5| 3 | 2 | 6+--------------------+-----------------------+ 71 row in set (0.05 sec) 8 9root@localhost:3306 [(none)]>select length('egg'),length('鸡蛋');10+---------------+------------------+11| length('egg') | length('鸡蛋') |12+---------------+------------------+13| 3 | 6 |14+---------------+------------------+151 row in set (0.00 sec) 可以看到,'鸡蛋'两个字的所占的字符数是2,字节数是6,这是因为汉字在mysql中使用utf8来表示,一个字符包含3个字节,所以结果就是3*2=6
2.合并字符串函数concat和concat_ws
concat函数返回连接参数产生的字符串,可以是两个,可以是多个,如果其中有一个为null,那么返回结果是null:
1root@localhost:3306 [(none)]>select concat('MySQL','5.7'),concat('MySQL',null,'5.7');2+-----------------------+----------------------------+3| concat('MySQL','5.7') | concat('MySQL',null,'5.7') |4+-----------------------+----------------------------+5| MySQL5.7 | NULL |6+-----------------------+----------------------------+71 row in set (0.05 sec) concat_ws函数接受一个分隔符,其他的用法和concat一致,直接来看例子:
1root@localhost:3306 [(none)]>select concat_ws('-','MySQL','5.7'),concat_ws('*','MySQL',null,'5.7');2+------------------------------+-----------------------------------+3| concat_ws('-','MySQL','5.7') | concat_ws('*','MySQL',null,'5.7') |4+------------------------------+-----------------------------------+5| MySQL-5.7 | MySQL*5.7 |6+------------------------------+-----------------------------------+71 row in set (0.00 sec) 需要注意的一点是,如果中间遇到null值,那么会直接进行忽略。
3.insert替换字符串函数
insert函数的使用方法为insert(str1,x,len,str2)
也就是使用str2带替换str1中的第x个字符开始后面的len个字符,话不多说,看例子:
1root@localhost:3306 [(none)]>select insert('hello',2,4,'haha'),insert('hello',-12,4,'haha'),insert('hello',2,10,'haha'),insert('hello',2,3,'haha')\G3*************************** 1. row ***************************4 insert('hello',2,4,'haha'): hhaha5insert('hello',-1,4,'haha'): hello6insert('hello',2,10,'haha'): hhaha7 insert('hello',2,3,'haha'): hhahao81 row in set (0.00 sec)上面的例子中,第一个替换的是从第2个字符开始,用4个字符替换hello中的四个字符;第二个是当起始位置变为-1的时候,超越了下标范围,则直接保持hello字符串不变;第三个替换的是从第二个开始,连续10个字符,后面的len越界,字符串只替换到实际中最后一个位置;最后一个替换中间的3个字符,所以总长度增加了1.
4字母大小写转换函数
这个比较好理解,直接看例子:
1root@localhost:3306 [(none)]>select lower('HELLO'),lcase('Hello'),upper('hello')2,ucase('HeLlo')\G3*************************** 1. row ***************************4lower('HELLO'): hello5lcase('Hello'): hello6upper('hello'): HELLO7ucase('HeLlo'): HELLO81 row in set (0.03 sec)
5.截取指定长度的字符串
分别是left函数和right函数,这两个函数也比较好理解,直接上例子:
1root@localhost:3306 [(none)]>select left('helloworld',5),right('helloworld',5);2+----------------------+-----------------------+3| left('helloworld',5) | right('helloworld',5) |4+----------------------+-----------------------+5| hello | world |6+----------------------+-----------------------+71 row in set (0.00 sec)
6.填充字符串的函数LPAD和RPAD
LPAD(s1,len,s2)这个函数是使用s2字符串把s1左侧的字符填充到len长度。
RPAD(s1,len,s2)这个函数是使用s2字符串把s1右侧的字符填充到len长度。
1root@localhost:3306 [(none)]>select lpad('hello',4,'?'),lpad('hello',8,'?') ; 2+---------------------+---------------------+ 3| lpad('hello',4,'?') | lpad('hello',8,'?') | 4+---------------------+---------------------+ 5| hell | ???hello | 6+---------------------+---------------------+ 71 row in set (0.04 sec) 8 910root@localhost:3306 [(none)]>select rpad('hello',4,'?'),rpad('hello',8,'?');11+---------------------+---------------------+12| rpad('hello',4,'?') | rpad('hello',8,'?') |13+---------------------+---------------------+14| hell | hello??? |15+---------------------+---------------------+161 row in set (0.00 sec) 需要注意的是,如果字符串的长度大于中间的len的时候,字符串会被截断到len值。
7.删除空格的函数LTRIM,RTRIM和TRIM
Ltrim是删除左侧的空格,Rtrim是删除右侧空格,trim是删除两侧的空格,示例如下:
1root@localhost:3306 [(none)]>select '( book )',concat('(',ltrim(' book '),')2'),concat('(',rtrim(' book '),')'),concat('(',trim(' book '),')')\G3*************************** 1. row ***************************4 ( book ): ( book )5concat('(',ltrim(' book '),')'): (book )6concat('(',rtrim(' book '),')'): ( book)7 concat('(',trim(' book '),')'): (book)81 row in set (0.00 sec)
8.删除指定字符串的函数trim(s1 from s2)
看看实例:
1root@localhost:3306 [(none)]>select trim('world' from 'helloworld' );2+----------------------------------+3| trim('world' from 'helloworld' ) |4+----------------------------------+5| hello |6+----------------------------------+71 row in set (0.00 sec)
9.重复生成字符串的函数repeat
这个比较好理解,直接看例子:
1root@localhost:3306 [(none)]>select repeat('mysql',3) ;2+-------------------+3| repeat('mysql',3) |4+-------------------+5| mysqlmysqlmysql |6+-------------------+71 row in set (0.00 sec)
还有一部分,明天接着写吧。