计算字符串长度的函数
CHAR_LENGTH(str) 、LENGTH(str)
例1:返回字符串的字符个数,汉字和数字或字母都是1个。
mysql> select char_length('zhangsan'),char_length('lisi');
+-------------------------+---------------------+
| char_length('zhangsan') | char_length('lisi') |
+-------------------------+---------------------+
| 8 | 4 |
+-------------------------+---------------------+
1 row in set (0.00 sec)
例2:返回字符串的字节长度,使用 utf8 编码字符集时,一个汉字是3个字节,一个数字或字母是1个字节
mysql> select length('张三'),length('zhangsan');
+------------------+--------------------+
| length('张三') | length('zhangsan') |
+------------------+--------------------+
| 6 | 8 |
+------------------+--------------------+
1 row in set (0.00 sec)
合并字符串的函数
CONCAT(s1,s2,...) 、CONCAT_WS(x,s1,s2,...)
例1:合并多个字符串
mysql> select concat('北京','海淀');
+---------------------------+
| concat('北京','海淀') |
+---------------------------+
| 北京海淀 |
+---------------------------+
1 row in set (0.01 sec)
例2:中间使用指定分隔符号,合并多个字符串
mysql> select concat_ws('-','北京','海淀','中关村');
+----------------------------------------------+
| concat_ws('-','北京','海淀','中关村') |
+----------------------------------------------+
| 北京-海淀-中关村 |
+----------------------------------------------+
1 row in set (0.00 sec)
替换字符串的函数
INSERT(s1,x,len,s2)
例:从abcde的第二个字符开始,到第三个字符修改成1234
mysql> select insert('abcde',2,3,'1234');
+----------------------------+
| insert('abcde',2,3,'1234') |
+----------------------------+
| a1234e |
+----------------------------+
1 row in set (0.00 sec)
转换大小写的函数
LOWER(str) 、LCASE(str) 、UPPER(str) 、UCASE(str)
例1:将大写字符串修改为小写,如果本身是小写则返回依旧是小写
mysql> select lower('FILE'),lower('text');
+---------------+---------------+
| lower('FILE') | lower('text') |
+---------------+---------------+
| file | text |
+---------------+---------------+
1 row in set (0.00 sec)
例2:将大写字母转换为小写字母
mysql> select lcase('FILE'),lcase('TExt');
+---------------+---------------+
| lcase('FILE') | lcase('TExt') |
+---------------+---------------+
| file | text |
+---------------+---------------+
1 row in set (0.00 sec)
例3:将小写字母转换成大写字母
mysql> select upper('BACKup'),upper('file');
+-----------------+---------------+
| upper('BACKup') | upper('file') |
+-----------------+---------------+
| BACKUP | FILE |
+-----------------+---------------+
1 row in set (0.00 sec)
例4:将小写字母转换为大写字母
mysql> select ucase('backup'),ucase('File');
+-----------------+---------------+
| ucase('backup') | ucase('File') |
+-----------------+---------------+
| BACKUP | FILE |
+-----------------+---------------+
1 row in set (0.00 sec)
获取指定长度的字符串的函数
LEFT(s,n) 、RIGHT(s,n)
例1:获取字符串最左侧开始的五个字符。
mysql> select left('abcdefg',5);
+-------------------+
| left('abcdefg',5) |
+-------------------+
| abcde |
+-------------------+
1 row in set (0.00 sec)
例2:获取字符串最右侧开始的第三个字符。
mysql> select right('abcdefg',3);
+--------------------+
| right('abcdefg',3) |
+--------------------+
| efg |
+--------------------+
1 row in set (0.00 sec)
填充字符串的函数
LPAD(s1,len,s2) 、RPAD(s1,len,s2)
例1:填充字符串,字符串大于4则不需要填充,直接被缩短到hell;字符串小于10则需要从左侧填充至10位,如果“s2”字符串不够,则重新排序(如:12312312)。
mysql> select lpad('hello',4,'123'),lpad('hello',10,'123');
+-----------------------+------------------------+
| lpad('hello',4,'123') | lpad('hello',10,'123') |
+-----------------------+------------------------+
| hell | 12312hello |
+-----------------------+------------------------+
1 row in set (0.00 sec)
例2:填充字符串,和上方相同,只是填充方式为右侧。
mysql> select rpad('hello',4,'123'),rpad('hello',10,'123');
+-----------------------+------------------------+
| rpad('hello',4,'123') | rpad('hello',10,'123') |
+-----------------------+------------------------+
| hell | hello12312 |
+-----------------------+------------------------+
1 row in set (0.00 sec)
删除空格的函数
LTRIM(s) 、RTRIM(s) 、TRIM(s)
例1:ltrim删除" hello world "左侧空格,下面可以看到仅删除了左侧空格,中间和右侧空格还在(因显示问题,可能看不出来)。
mysql> select ltrim( 'hello world' );
+------------------------+
| ltrim( 'hello world' ) |
+------------------------+
| hello world |
+------------------------+
1 row in set (0.00 sec)
例2:rtrim删除" hello world "右侧空格(和ltrim命令类似,只是本次删除的右侧空格),下面可以看到仅删除了右侧空格,中间和左侧空格还在(因显示问题,可能看不出来)。
mysql> select rtrim( 'hello world' );
+------------------------+
| rtrim( 'hello world' ) |
+------------------------+
| hello world |
+------------------------+
1 row in set (0.00 sec)
例3:trim删除" hello world "左右两侧空格,下面可以看到仅删除了左右侧空格,中间还在(因显示问题,可能看不出来)。
mysql> select trim( 'hello world' );
+-----------------------+
| trim( 'hello world' ) |
+-----------------------+
| hello world |
+-----------------------+
1 row in set (0.00 sec)
删除指定字符串的函数
TRIM(s1 FROM s)
例:删除字符串左右两端的ab。
mysql> select trim('ab' from 'ab12ab3ab');
+-----------------------------+
| trim('ab' from 'ab12ab3ab') |
+-----------------------------+
| 12ab3 |
+-----------------------------+
1 row in set (0.00 sec)
重复生成字符串的函数
REPEAT(s,n)
例1:生成三次'abc'
mysql> select repeat('abc',3);
+-----------------+
| repeat('abc',3) |
+-----------------+
| abcabcabc |
+-----------------+
1 row in set (0.01 sec)
例2:插入a表 ’张三‘ 循环三次
mysql> insert into a values(repeat('张三',3));
Query OK, 1 row affected (0.05 sec)
mysql> select * from a;
+--------------------+
| name |
+--------------------+
| 张三张三张三 |
+--------------------+
1 row in set (0.00 sec)
空格函数
SPACE(n)
例:生成10个空格
mysql> select space(10);
+------------+
| space(10) |
+------------+
| |
+------------+
1 row in set (0.00 sec)
替换函数
REPLACE(s,s1,s2)
例:根据内容替换字符串,但需要注意合理替换。如下所示,替换abc为全部替换,可能没有达到自己想达到的替换。
mysql> select replace('xxx.mysql.com','x','w');
+----------------------------------+
| replace('xxx.mysql.com','x','w') |
+----------------------------------+
| www.mysql.com |
+----------------------------------+
1 row in set (0.01 sec)
mysql> select replace('abc.mysql.abcd','abc','www');
+----------------------------------------+
| replace('abc.mysql.abcd','abc','www') |
+----------------------------------------+
| www.mysql.wwwd |
+----------------------------------------+
1 row in set (0.00 sec)
比较字符串大小的函数
STRCMP(s1,s2)
例:字符串相同,返回结果为0;字符串s1大于s2,返回结果为1(这里b比a大);字符串s1小于s2,返回结果为-1
mysql> select strcmp('abc','abc');
+---------------------+
| strcmp('abc','abc') |
+---------------------+
| 0 |
+---------------------+
1 row in set (0.00 sec)
mysql> select strcmp('bbc','abc');
+---------------------+
| strcmp('bbc','abc') |
+---------------------+
| 1 |
+---------------------+
1 row in set (0.00 sec)
mysql> select strcmp('bbc','cbc');
+---------------------+
| strcmp('bbc','cbc') |
+---------------------+
| -1 |
+---------------------+
1 row in set (0.00 sec)
获取子字符串的函数
SUBSTRING(s,n,len) 、MID(s,n,len)
例1:SUBSTRING(s,n,len) 用于获取指定位置的子字符串
mysql> SELECT SUBSTRING('breakfast',5) AS col1, # 从第5个字符串开始获取
-> SUBSTRING('breakfast',5,3) AS col2, # 从第5个字符串开始,获取3个
-> SUBSTRING('breakfast',-5) AS col3, # (倒向)从第5个字符串开始获取
-> SUBSTRING('breakfast',-5,3) AS col4; # (倒向)从第5个字符串开始获取,获取3个
+-------+------+-------+------+
| col1 | col2 | col3 | col4 |
+-------+------+-------+------+
| kfast | kfa | kfast | kfa |
+-------+------+-------+------+
例2:MID(s,n,len) 用于获取指定位置的子字符串
mysql> SELECT MID('breakfast',5) AS col1, # 从第5个字符串开始获取
-> MID('breakfast',5,3) AS col2, # 从第5个字符串开始,获取3个
-> MID('breakfast',-5) AS col3, # (倒向)从第5个字符串开始获取
-> MID('breakfast',-5,3) AS col4; # (倒向)从第5个字符串开始获取,获取3个
+-------+------+-------+------+
| col1 | col2 | col3 | col4 |
+-------+------+-------+------+
| kfast | kfa | kfast | kfa |
+-------+------+-------+------+
匹配子字符串开始位置的函数
LOCATE(str1,str) 、POSITION(str1 IN str) 、INSTR(str, str1)
下面三种用结果及用法相同,只有字符串位置不同。
例1:返回字符串'def'在字符串'abcdefg'中匹配到的位置,所以返回结果为4
mysql> select locate('def','abcdefg');
+-------------------------+
| locate('def','abcdefg') |
+-------------------------+
| 4 |
+-------------------------+
1 row in set (0.00 sec)
例2:返回字符串'def'在字符串'abcdefg'中匹配到的位置,所以返回结果为4
mysql> select position('def' in 'abcdefg');
+------------------------------+
| position('def' in 'abcdefg') |
+------------------------------+
| 4 |
+------------------------------+
1 row in set (0.00 sec)
例3:返回字符串'def'在字符串'abcdefg'中匹配到的位置,所以返回结果为4
mysql> select instr('abcdefg','def');
+------------------------+
| instr('abcdefg','def') |
+------------------------+
| 4 |
+------------------------+
1 row in set (0.00 sec)
反转字符串的函数
REVERSE(s)
例:使字符串的反转
mysql> select reverse('abcde');
+------------------+
| reverse('abcde') |
+------------------+
| edcba |
+------------------+
1 row in set (0.00 sec)
返回指定位置的字符串的函数
ELT(n, s1, s2, s3, .....)
例:返回第个n个字符串的值,如果n超出全部值的范围,则返回null
mysql> select elt(3,'a','b','c','d','e'),elt(6,'a','b','c','d','e');
+----------------------------+----------------------------+
| elt(3,'a','b','c','d','e') | elt(6,'a','b','c','d','e') |
+----------------------------+----------------------------+
| c | NULL |
+----------------------------+----------------------------+
1 row in set (0.00 sec)
返回指定字符串位置的函数
FIELD(s, s1, s2, .....)
例:返回s在列表中的位置,如果列表中不存在则返回0
mysql> select field('hello','a','b','hello','d'),field('a','hello','world');
+------------------------------------+----------------------------+
| field('hello','a','b','hello','d') | field('a','hello','world') |
+------------------------------------+----------------------------+
| 3 | 0 |
+------------------------------------+----------------------------+
1 row in set (0.00 sec)
返回子字符串位置的函数
FIND_IN_SET(s1, s2)
例:返回s1在列表中的位置,如果列表中不存在则返回0
mysql> select find_in_set('hello','a,b,hello,d'),find_in_set('hello','a,b,c');
+------------------------------------+------------------------------+
| find_in_set('hello','a,b,hello,d') | find_in_set('hello','a,b,c') |
+------------------------------------+------------------------------+
| 3 | 0 |
+------------------------------------+------------------------------+
1 row in set (0.00 sec)