MySQL-字符串函数

计算字符串长度的函数

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)

猜你喜欢

转载自blog.csdn.net/qq_61116007/article/details/129039860