服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - mysql字符串函数详细汇总

mysql字符串函数详细汇总

2022-07-26 19:50公号运维家 Mysql

这篇文章主要介绍了mysql字符串函数详细汇总,字符串函数主要用来处理数据库中的字符串数据,更多相关内容需要的朋友可以参考一下

前言

字符串函数主要用来处理数据库中的字符串数据。​​mysql​​中的字符串函数有计算字符串长度函数、字符串合并函数、字符串替换函数、字符串比较函数、查找指定字符串位置函数等。

计算字符串字符数的函数

​CHAR_LENGTH(str)​​​函数计算字符串​​str​​所包含的字符个数。一个多字节字符算作一个单字符。

?
1
2
3
4
5
6
7
8
9
mysql> select char_length('date'), char_length('yunweijia'), char_length('运维家');
+---------------------+--------------------------+--------------------------+
| char_length('date') | char_length('yunweijia') | char_length('运维家') |
+---------------------+--------------------------+--------------------------+
| 4 | 9 | 3 |
+---------------------+--------------------------+--------------------------+
1 row in set (0.00 sec)
 
mysql>

计算字符串长度的函数

​LENGTH(str)​​​返回值为字符串的字节长度,使用​​utf8​​编码字符集时,一个汉字是三字节,一个数字或者字母算1字节;

?
1
2
3
4
5
6
7
8
9
mysql> select length('date'), length('yunweijia'), length('运维家');
+----------------+---------------------+---------------------+
| length('date') | length('yunweijia') | length('运维家') |
+----------------+---------------------+---------------------+
| 4 | 9 | 9 |
+----------------+---------------------+---------------------+
1 row in set (0.00 sec)
 
mysql>

合并字符串函数CONCAT(s1,s2,...)、CONCAT_WS(x,s1,s2,...)

​concat(s1,s2,...)​​返回结果为连接参数产生的字符串,或许有一个或多个参数。

如果有一个参数为​​null​​​,则返回值为​​null​​。

如果所有参数均为非二进制字符串,则结果为非二进制字符串。

如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。

?
1
2
3
4
5
6
7
8
9
mysql> select concat('mysql 8.0', 'yunweijia'), concat('heihei', null, '666');
+----------------------------------+-------------------------------+
| concat('mysql 8.0', 'yunweijia') | concat('heihei', null, '666') |
+----------------------------------+-------------------------------+
| mysql 8.0yunweijia | NULL |
+----------------------------------+-------------------------------+
1 row in set (0.00 sec)
 
mysql>

​concat_ws(x,s1,s2,...)​​​中,​​x​​是分隔符,分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其他参数。

如果分隔符是​​null​​​,则结果为​​null​​。该函数会忽略任何分隔符后面的​​null​​值

?
1
2
3
4
5
6
7
8
9
mysql> select concat_ws('-', 'mysql', '8.0', 'ywj'), concat_ws('@', 'one', null, 'two');
+---------------------------------------+------------------------------------+
| concat_ws('-', 'mysql', '8.0', 'ywj') | concat_ws('@', 'one', null, 'two') |
+---------------------------------------+------------------------------------+
| mysql-8.0-ywj | one@two |
+---------------------------------------+------------------------------------+
1 row in set (0.00 sec)
 
mysql>

替换字符串的函数INSERT(s1,x,len,s2)

​insert(s1,x,len,s2)​​​返回字符串​​s1​​​,其子字符串起始于​​x​​​位置和被字符串​​s2​​​取代的​​len​​​字符。如果​​x​​​超过字符串长度,则返回值为原始字符串。假如​​len​​​的长度大于其他字符串的长度,则从位置​​x​​​开始替换。若任何一个参数为​​null​​​,则返回值为​​null​​。

?
1
2
3
4
5
6
7
8
9
mysql> select insert('yunweijia', 2, 3, 'aaaaaaaa') as coll, insert('yunweijia', -1, 3, 'bbbbbbbb') as coll2, insert('yunweijia', 2, 99, 'ccccccccc') as coll3;
+----------------+-----------+------------+
| coll | coll2 | coll3 |
+----------------+-----------+------------+
| yaaaaaaaaeijia | yunweijia | yccccccccc |
+----------------+-----------+------------+
1 row in set (0.00 sec)
 
mysql>

第一个函数​​insert('yunweijia', 2, 3, 'aaaaaaaa')​​​将​​yunweijia​​​第二个字符开始长度为3的字符串,替换成​​aaaaaaaa​​;

第二个函数​​insert('yunweijia', -1, 3, 'bbbbbbbb')​​中由于-1超出了字符串长度,直接返回了原字符串;

第三个函数​​insert('yunweijia', 2, 99, 'ccccccccc')​​​中由于替换长度99,超出了字符串原本长度,所以从第二个字符开始,截取后面所有的字符,并替换为指定字符​​ccccccccc​​。

字母大小写转换函数

大写转小写

​lower(str)​​​或者​​lcase(str)​​​可以将字符串​​str​​中的字母字符全部转换成小写字母。

?
1
2
3
4
5
6
7
8
9
mysql> select lower('YUNweiJIA'), lcase('YUNweiJIA');
+--------------------+--------------------+
| lower('YUNweiJIA') | lcase('YUNweiJIA') |
+--------------------+--------------------+
| yunweijia | yunweijia |
+--------------------+--------------------+
1 row in set (0.00 sec)
 
mysql>

小写转大写

​upper(str)​​​或者​​ucase(str)​​​可以将字符串​​str​​中的字母字符全部转换成大写字母。

?
1
2
3
4
5
6
7
8
9
mysql> select upper('yunWEIjia'), ucase('yunWEIjia');
+--------------------+--------------------+
| upper('yunWEIjia') | ucase('yunWEIjia') |
+--------------------+--------------------+
| YUNWEIJIA | YUNWEIJIA |
+--------------------+--------------------+
1 row in set (0.00 sec)
 
mysql>

获取指定长度的字符串的函数LEFT(s,n)和RIGHT(s,n)

​left(s,n)​​​返回字符串​​s​​​开始的最左边的​​n​​个字符。

?
1
2
3
4
5
6
7
8
9
mysql> select left('yunweijia', 5);
+----------------------+
| left('yunweijia', 5) |
+----------------------+
| yunwe |
+----------------------+
1 row in set (0.00 sec)
 
mysql>

​right(s,n)​​​返回字符串​​s​​​开始的最右边的​​n​​个字符。

?
1
2
3
4
5
6
7
8
9
mysql> select right('yunweijia', 5);
+-----------------------+
| right('yunweijia', 5) |
+-----------------------+
| eijia |
+-----------------------+
1 row in set (0.00 sec)
 
mysql>

填充字符串的函数LPAD(s1,len,s2)和RPAD(s1,len,s2)

​lpad(s1,len,s2)​​​返回字符串​​s1​​​,其左边由字符串​​s2​​​填补到​​len​​字符长度。假如​​s1​​的长度大于​​len​​,则返回值被缩短至​​len​​字符。

?
1
2
3
4
5
6
7
8
9
mysql> select lpad('yunweijia', 4, '@#'), lpad('yunweijia', 20, '@#');
+----------------------------+-----------------------------+
| lpad('yunweijia', 4, '@#') | lpad('yunweijia', 20, '@#') |
+----------------------------+-----------------------------+
| yunw | @#@#@#@#@#@yunweijia |
+----------------------------+-----------------------------+
1 row in set (0.00 sec)
 
mysql>

由于字符串​​yunweijia​​长度大于4,所以不仅不需要填充,反而需要截取至从左开始4位字符的字符串。

​RPAD(s1,len,s2)​​​返回字符串​​s1​​​,其右边被字符串​​s2​​​填补至​​len​​​字符长度。假如字符串​​s1​​​的长度大于​​len​​​,则返回值被缩短到​​len​​字符长度。

?
1
2
3
4
5
6
7
8
9
mysql> select rpad('yunweijia', 4, '@#'), rpad('yunweijia', 20, '@#');
+----------------------------+-----------------------------+
| rpad('yunweijia', 4, '@#') | rpad('yunweijia', 20, '@#') |
+----------------------------+-----------------------------+
| yunw | yunweijia@#@#@#@#@#@ |
+----------------------------+-----------------------------+
1 row in set (0.00 sec)
 
mysql>

由于字符串​​yunweijia​​长度大于4,所以不仅不需要填充,反而需要截取至从左开始4位字符的字符串。

删除空格的函数LTRIM(s)、RTRIM(s)和TRIM(s)

​ltrim(s)​​​返回字符串​​s​​,字符串左侧空格字符被删除;

?
1
2
3
4
5
6
7
8
9
mysql> select '( yunweijia )', concat('(',ltrim(' yunweijia '),')');
+-----------------+----------------------------------------+
| ( yunweijia ) | concat('(',ltrim(' yunweijia '),')') |
+-----------------+----------------------------------------+
| ( yunweijia ) | (yunweijia ) |
+-----------------+----------------------------------------+
1 row in set (0.00 sec)
 
mysql>

​rtrim(s)​​​返回字符串​​s​​,字符串右侧空格字符被删除;

?
1
2
3
4
5
6
7
8
9
mysql> select '( yunweijia )', concat( '(', rtrim(' yunweijia '), ')' );
+-----------------+--------------------------------------------+
| ( yunweijia ) | concat( '(', rtrim(' yunweijia '), ')' ) |
+-----------------+--------------------------------------------+
| ( yunweijia ) | ( yunweijia) |
+-----------------+--------------------------------------------+
1 row in set (0.00 sec)
 
mysql>

​trim(s)​​​删除字符串​​s​​两侧的空格;

?
1
2
3
4
5
6
7
8
9
mysql> select '( yunweijia )', concat( '(', trim(' yunweijia '), ')' );
+-----------------+-------------------------------------------+
| ( yunweijia ) | concat( '(', trim(' yunweijia '), ')' ) |
+-----------------+-------------------------------------------+
| ( yunweijia ) | (yunweijia) |
+-----------------+-------------------------------------------+
1 row in set (0.00 sec)
 
mysql>

删除指定字符串的函数TRIM(s1 FROM s)

​trim(s1 from s)​​​删除字符串​​s​​​中两端所有的子字符串​​s1​​​。​​s1​​为可选项,在未指定情况下,删除空格。

?
1
2
3
4
5
6
7
8
9
mysql> select trim('@#' from '@#@#yunwei@#jia@#@#');
+---------------------------------------+
| trim('@#' from '@#@#yunwei@#jia@#@#') |
+---------------------------------------+
| yunwei@#jia |
+---------------------------------------+
1 row in set (0.00 sec)
 
mysql>

可以看到,只删除指定字符串两边的内容,中间的内容并不会进行删除。

重复生成字符串的函数REPEAT(s.n)

​repeat(s,n)​​​返回一个由重复字符串​​s​​​组成的字符串,字符串​​s​​​的数量等于​​n​​;

如果​​n<=0​​,则返回一个空字符串;

如果​​s​​​或者​​n​​​为​​null​​​,则返回​​null​​。

?
1
2
3
4
5
6
7
8
9
mysql> select repeat('x', 10), repeat('x', 0), repeat('x', null);
+-----------------+----------------+-------------------+
| repeat('x', 10) | repeat('x', 0) | repeat('x', null) |
+-----------------+----------------+-------------------+
| xxxxxxxxxx | | NULL |
+-----------------+----------------+-------------------+
1 row in set (0.00 sec)
 
mysql>

空格函数SPACE(n)

​space(n)​​​返回一个由​​n​​个空格组成的字符串。

?
1
2
3
4
5
6
7
8
9
mysql> select concat('(', space(10), ')');
+-----------------------------+
| concat('(', space(10), ')') |
+-----------------------------+
| ( ) |
+-----------------------------+
1 row in set (0.00 sec)
 
mysql>

替换函数REPLACE(s,s1,s2)

​replace(s,s1,s2)​​​使用字符串​​s2​​​替代字符串​​s​​​中所有的字符串​​s1​​;

?
1
2
3
4
5
6
7
8
9
mysql> select replace('yunweijia', 'i', '@#');
+---------------------------------+
| replace('yunweijia', 'i', '@#') |
+---------------------------------+
| yunwe@#j@#a |
+---------------------------------+
1 row in set (0.00 sec)
 
mysql>

比较字符串大小的函数strcmp(s1,s2)

​strcmp(s1,s2)​​:若所有的字符串均相同,则返回0;

若根据当前分类次序,第一个参数小于第二个,则返回-1;

其他情况返回1。

?
1
2
3
4
5
6
7
8
9
mysql> select strcmp('txt', 'txt'), strcmp('txt', 'txt2'), strcmp('txt2', 'txt');
+----------------------+-----------------------+-----------------------+
| strcmp('txt', 'txt') | strcmp('txt', 'txt2') | strcmp('txt2', 'txt') |
+----------------------+-----------------------+-----------------------+
| 0 | -1 | 1 |
+----------------------+-----------------------+-----------------------+
1 row in set (0.00 sec)
 
mysql>

获取子串的函数SUBSTRING(s,b,len)和MID(s,n,len)

​substring(s,n,len)​​​带有​​len​​​参数的格式,从字符串​​s​​​返回一个长度与​​len​​​字符相同的子字符串,起始于位置​​n​​。

也可能对​​n​​​使用一个负值。假如这样,则子字符串的位置起始于字符串结尾的​​n​​​字符,即倒数第​​n​​个字符,而不是字符串的开头位置。

?
1
2
3
4
5
6
7
8
9
mysql> select substring('yunweijia', 5, 2) as coll, substring('yunweijia', -3) as coll1, substring('yunweijia', 3) as coss2;
+------+-------+---------+
| coll | coll1 | coss2 |
+------+-------+---------+
| ei | jia | nweijia |
+------+-------+---------+
1 row in set (0.00 sec)
 
mysql>

匹配子串开始位置的函数

​locate(str1,str)​​​、​​position(str1 in str)​​​和​​instr(str, str11)​​​三个函数的作用相同,返回子字符串​​str1​​​在字符串​​str​​中的开始位置。

?
1
2
3
4
5
6
7
8
9
mysql> select locate('wei', 'yunweijia'), position('wei' in 'yunweijia'), instr('yunweijia', 'wei');
+----------------------------+--------------------------------+---------------------------+
| locate('wei', 'yunweijia') | position('wei' in 'yunweijia') | instr('yunweijia', 'wei') |
+----------------------------+--------------------------------+---------------------------+
| 4 | 4 | 4 |
+----------------------------+--------------------------------+---------------------------+
1 row in set (0.00 sec)
 
mysql>

字符串逆序的函数REVERSE(s)

​reverse(s)​​​将字符串​​s​​​反转,返回的字符串的顺序和​​s​​字符串顺序相反。

?
1
2
3
4
5
6
7
8
9
mysql> select reverse('yunweijia') as coll, reverse('123456789') as coll1;
+-----------+-----------+
| coll | coll1 |
+-----------+-----------+
| aijiewnuy | 987654321 |
+-----------+-----------+
1 row in set (0.00 sec)
 
mysql>

返回指定位置的字符串的函数

​elt(n, str1, str2,...,strn)​​​:如果​​n=1​​​,则返回值为第一个字符串​​str1​​;

如果​​n=2​​​,则返回值为第二个字符串​​str2​​;以此类推。

如果​​n<1​​​或者大于参数的数目,则返回值为​​null​​。

?
1
2
3
4
5
6
7
8
9
mysql> select elt(1, 'ni1', 'wo1', 'ta') as coll, elt(3, 'ni1', 'wo1', 'ta') as coll_1, elt(0, 'ni1', 'wo1', 'ta') as coll_2, elt(4, 'ni1', 'wo1', 'ta') as coll_3;
+------+--------+--------+--------+
| coll | coll_1 | coll_2 | coll_3 |
+------+--------+--------+--------+
| ni1 | ta | NULL | NULL |
+------+--------+--------+--------+
1 row in set (0.00 sec)
 
mysql>

返回指定字符串位置的函数FIELD(s,s1,s2,...,sn)

​field(s,s1,s2,...,sn)​​​返回字符串​​s​​​在列表​​s1,s2,...,sn​​​中第一次出现的位置,如果找不到​​s​​,则直接返回0。

如果​​s​​​为​​null​​,则返回时是0。

?
1
2
3
4
5
6
7
8
9
mysql> select field('w', 'yun', 'yunwei', 'w', 'yunweijia') as coll, field('x', 'yun', 'yunwei', 'w', 'yunweijia') as coll_1, field(null, 'yun', 'yunwei', 'w', 'yunweijia') as coll_2;
+------+--------+--------+
| coll | coll_1 | coll_2 |
+------+--------+--------+
| 3 | 0 | 0 |
+------+--------+--------+
1 row in set (0.00 sec)
 
mysql>

返回子串位置的函数FIND_IN_SET(s1,s2)

​find_in_set(s1,s2)​​​返回字符串​​s1​​​在字符串列表​​s2​​中出现的位置,字符串列表是一个有多个逗号分开的字符串组成的列表。

如果​​s1​​​不在​​s2​​​或​​s2​​为空字符串,则返回值为0;

如果任意一个参数为​​null​​​,则返回值为​​null​​。

?
1
2
3
4
5
6
7
8
9
mysql> select find_in_set('X', 'yun,xwei,Xwei,X,jia');
+-----------------------------------------+
| find_in_set('X', 'yun,xwei,Xwei,X,jia') |
+-----------------------------------------+
| 4 |
+-----------------------------------------+
1 row in set (0.00 sec)
 
mysql>

选取字符串的函数MAKE_SET(x,s1,s2,...,sn)

​make_set(x,s1,s2,...,sn)​​​函数按​​x​​​的二进制数从​​s1,s2,...,sn​​中选取字符串。

?
1
2
3
4
5
6
7
8
9
mysql> select make_set(5, 'a', 'b', 'c', 'd') as coll, make_set(1|4, 'a', 'b', 'c', 'd') as coll_1, make_set(1|4, 'a', 'b', null, 'c', 'd') as coll_2, make_set(0, 'a', 'b', 'c', 'd') as coll_3;
+------+--------+--------+--------+
| coll | coll_1 | coll_2 | coll_3 |
+------+--------+--------+--------+
| a,c | a,c | a | |
+------+--------+--------+--------+
1 row in set (0.00 sec)
 
mysql>

5的二进制是​​0101​​​,从右往左的第1位和第3位是1,所以选取​​a、c​​;

1的二进制是​​1​​​,4的二进制是​​100​​​,进行或操作之后的二进制是​​101​​​,从右往左的第1位和第3位是1,所以选取​​a、c​​;

由于​​null​​​不参与计算,所以不会添加到结果中,所以​​coll_2​​​只有​​a​​。

到此这篇关于mysql字符串函数详细汇总的文章就介绍到这了,更多相关mysql字符串内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.51cto.com/u_12386780/5502737

延伸 · 阅读

精彩推荐