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