mysql字符串函数详细汇总


前言 字符串函数主要用来处理数据库中的字符串数据 。??mysql??中的字符串函数有计算字符串长度函数、字符串合并函数、字符串替换函数、字符串比较函数、查找指定字符串位置函数等 。
计算字符串字符数的函数 ??char_length(str)???函数计算字符串??str??所包含的字符个数 。一个多字节字符算作一个单字符 。
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字节;
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?? 。
如果所有参数均为非二进制字符串 , 则结果为非二进制字符串 。
如果自变量中含有任一二进制字符串 , 则结果为一个二进制字符串 。
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??值 。
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?? 。
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??中的字母字符全部转换成小写字母 。
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??中的字母字符全部转换成大写字母 。
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??个字符 。
mysql> select left('yunweijia', 5);+----------------------+| left('yunweijia', 5) |+----------------------+| yunwe |+----------------------+1 row in set (0.00 sec)mysql>??right(s,n)???返回字符串??s???开始的最右边的??n??个字符 。
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??字符 。
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??字符长度 。
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?? , 字符串左侧空格字符被删除;
mysql> select '( yunweijia )', concat('(',ltrim(' yunweijia '),')');+-----------------+----------------------------------------+| ( yunweijia ) | concat('(',ltrim(' yunweijia '),')') |+-----------------+----------------------------------------+| ( yunweijia ) | (yunweijia ) |+-----------------+----------------------------------------+1 row in set (0.00 sec)mysql>??rtrim(s)???返回字符串??s?? , 字符串右侧空格字符被删除;
mysql> select '( yunweijia )', concat( '(', rtrim(' yunweijia '), ')' );+-----------------+--------------------------------------------+| ( yunweijia ) | concat( '(', rtrim(' yunweijia '), ')' ) |+-----------------+--------------------------------------------+| ( yunweijia ) | ( yunweijia) |+-----------------+--------------------------------------------+1 row in set (0.00 sec)mysql>??trim(s)???删除字符串??s??两侧的空格;
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??为可选项 , 在未指定情况下 , 删除空格 。
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?? 。
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??个空格组成的字符串 。
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??;
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 。
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??个字符 , 而不是字符串的开头位置 。
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??中的开始位置 。
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??字符串顺序相反 。
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?? 。
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 。
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?? 。
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??中选取字符串 。
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字符串函数详细汇总的文章就介绍到这了,更多相关mysql字符串内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

    推荐阅读