MySQL笔记四之 字符串函数

MySQL笔记四之 字符串函数

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

1.计算字符串字符数的函数和字符串长度的函数
mysql> SELECT CHAR_LENGTH('hello'),CHAR_LENGTH('egg');
+----------------------+--------------------+
| CHAR_LENGTH('hello') | CHAR_LENGTH('egg') |
+----------------------+--------------------+
|                    5 |                  3 |
+----------------------+--------------------+
1 row in set (0.00 sec)

总结:CHAR_LENGTH(str)返回值为字符串str所包含的字符个数。一个多字节字符算作一个单字符。

mysql> SELECT LENGTH('hello'),LENGTH('egg');
+-----------------+---------------+
| LENGTH('hello') | LENGTH('egg') |
+-----------------+---------------+
|               5 |             3 |
+-----------------+---------------+
1 row in set (0.00 sec)

总结:LENGTH(str)返回值为字符串的字节长度,使用utf8编码字符集时,一个汉字是3个字节,一个数字或者字母算一个字节。

2.合并字符串函数CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…)
mysql> SELECT CONCAT('My SQL','5.6'),CONCAT('My',NULL,'SQL');
+------------------------+-------------------------+
| CONCAT('My SQL','5.6') | CONCAT('My',NULL,'SQL') |
+------------------------+-------------------------+
| My SQL5.6              | NULL                    |
+------------------------+-------------------------+
1 row in set (0.05 sec)

总结:
a.CONCAT(s1,s2,…)返回结果为连接参数产生的字符串,一个或多个参数。
b.有任何一个参数为NULL,则返回值为NULL.
c.如果所有参数均为非二进制字符串,则结果为非二进制字符串。
d.如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。

mysql> SELECT CONCAT_WS('-','1st','2nd','3rd'),CONCAT_WS('*','1st',NULL,'3rd');
+----------------------------------+---------------------------------+
| CONCAT_WS('-','1st','2nd','3rd') | CONCAT_WS('*','1st',NULL,'3rd') |
+----------------------------------+---------------------------------+
| 1st-2nd-3rd                      | 1st*3rd                         |
+----------------------------------+---------------------------------+
1 row in set (0.00 sec)

总结:
a.CONCAT_WS代表CONCAT WITH Separator,是CONCAT()的特殊形式。
b.第一个参数x是其他参数的分隔符,分隔符的位置放在要连接的两个字符串之间。
c.分隔符可以是一个字符串,也可以是其他参数。
d.如果分隔符为NULL,则结果为NULL。
f.函数会忽略任何分隔符参数后的NULL值。

3.替换字符串的函数INSERT(s1,x,len,s2)
mysql> SELECT INSERT('Quest',2,4,'What') AS col1,
    -> INSERT('Quest',-1,4,'What') AS col2,
    -> INSERT('Quest',3,100,'Wh') AS col3;
+-------+-------+------+
| col1  | col2  | col3 |
+-------+-------+------+
| QWhat | Quest | QuWh |
+-------+-------+------+
1 row in set (0.00 sec)

总结:
a.INSERT(s1,x,len,s2)返回字符串s1,其子字符串起始于x位置和被字符串s2取代的len字符。
b.如果x超过字符串长度,则返回值为原始字符串。
c.假如len的长度大于其他字符串的长度,则从位置x开始替换。替换s2的所有。
d.若任何一个参数为NULL,则返回值为NULL。

4.字母大小转换函数
mysql> SELECT LOWER('BEAUTIFUL'),LCASE('Well');
+--------------------+---------------+
| LOWER('BEAUTIFUL') | LCASE('Well') |
+--------------------+---------------+
| beautiful          | well          |
+--------------------+---------------+
1 row in set (0.00 sec)

mysql> SELECT UPPER('black'),UCASE('BLacK');
+----------------+----------------+
| UPPER('black') | UCASE('BLacK') |
+----------------+----------------+
| BLACK          | BLACK          |
+----------------+----------------+
1 row in set (0.00 sec)

总结:
a.LOWER(str)或者LCASE(str)可以将字符串str中的字母字符全部转换成小写字母。
b.UPPER(str)或者UCASE(str)函数将字符串中所有字母字符转换成大写字母。

5.获取指定长度的字符串的函数LEFT(s,n)和RIGHT(s,n)
mysql> SELECT LEFT('football',5);
+--------------------+
| LEFT('football',5) |
+--------------------+
| footb              |
+--------------------+
1 row in set (0.00 sec)

mysql> SELECT RIGHT('football',4);
+---------------------+
| RIGHT('football',4) |
+---------------------+
| ball                |
+---------------------+
1 row in set (0.00 sec)

总结:
a.LEFT(s,n)返回字符串s开始的最左边n个字符。
b.RIGHT(s,n)返回字符串str最右边n个字符。

6.填充字符串的函数LPAD(s1,len,s2)和RPAD(s1,len,s2)
mysql> SELECT LPAD('hello',4,'??'),LPAD('hello',10,'??');
+----------------------+-----------------------+
| LPAD('hello',4,'??') | LPAD('hello',10,'??') |
+----------------------+-----------------------+
| hell                 | ?????hello            |
+----------------------+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT RPAD('hello',4,'?'),RPAD('hello',10,'?');
+---------------------+----------------------+
| RPAD('hello',4,'?') | RPAD('hello',10,'?') |
+---------------------+----------------------+
| hell                | hello?????           |
+---------------------+----------------------+
1 row in set (0.00 sec)

总结:
a.LPAD(s1,len,s2)返回字符串s1,其左边由字符串s2填补到len字符串长度。假如s1的长度大于len,则返回值被缩短至len字符。
b.PRAD(s1,len,s2)返回字符串s1,其右边被字符串s2填补至len字符长度。假如字符串s1的长度大于len,则返回值被缩短至len字符长度。

解释:
字符串“hello”长度大于4,不需要填充,因此LPAD(‘hello’,4,’??’)只返回被缩短的长度为4的字符串hell;字符串“hello”长度小于10,LPAD(‘hello’,10,’??’)返回结果为“?????hello”,左侧填充“?”,长度为10;

7.删除空格的函数LTRIM(s)、RTRIM(s)和TRIM(s)
mysql> SELECT '(  book  )',CONCAT('(',LTRIM('  book  '),')');
+------------+-----------------------------------+
| (  book  ) | CONCAT('(',LTRIM('  book  '),')') |
+------------+-----------------------------------+
| (  book  ) | (book  )                          |
+------------+-----------------------------------+
1 row in set (0.00 sec)

mysql> SELECT '(  book  )',CONCAT('(',RTRIM('  book  '),')');
+------------+-----------------------------------+
| (  book  ) | CONCAT('(',RTRIM('  book  '),')') |
+------------+-----------------------------------+
| (  book  ) | (  book)                          |
+------------+-----------------------------------+
1 row in set (0.01 sec)

mysql> SELECT '(  book  )',CONCAT('(',TRIM('  book  '),')');
+------------+----------------------------------+
| (  book  ) | CONCAT('(',TRIM('  book  '),')') |
+------------+----------------------------------+
| (  book  ) | (book)                           |
+------------+----------------------------------+
1 row in set (0.00 sec)

总结:
a.LTRIM(s)返回字符串s,字符串左侧空格字符被删除。
b.RTRIM(s)返回字符串s,字符串右侧空格字符被删除。
c.TRIM(s) 删除字符串s两侧的空格。
d.字符串s中间的空格不删除。

8.删除指定字符串的函数TRIM(s1 FROM s)
mysql> SELECT TRIM('xy' FROM 'xyxksdjsxyxsdsjxxyxy');
+----------------------------------------+
| TRIM('xy' FROM 'xyxksdjsxyxsdsjxxyxy') |
+----------------------------------------+
| xksdjsxyxsdsjx                         |
+----------------------------------------+
1 row in set (0.09 sec)

总结:
a.TRIM(s1 FROM s2)函数删除字符串中两端指定的字符。
b.中间的字符串不删除。

9.重复生成字符串的函数REPEAT(s,n)
mysql> SELECT REPEAT('MySQL',3);
+-------------------+
| REPEAT('MySQL',3) |
+-------------------+
| MySQLMySQLMySQL   |
+-------------------+
1 row in set (0.01 sec)

总结:
a.REPEATE(s,n)返回一个有重复的字符串s组成的字符串,字符串s的数目等于n
b.若n<=0,则返回一个空字符串。
c.若s或n为NULL,则返回NULL。

10.空格函数SPACE(n)和替换函数REPLACE(s,s1,s2)
mysql> SELECT CONCAT('(',SPACE(6),')');
+--------------------------+
| CONCAT('(',SPACE(6),')') |
+--------------------------+
| (      )                 |
+--------------------------+
1 row in set (0.00 sec)

mysql> SELECT REPLACE('xxx.mysql.com','x','w');
+----------------------------------+
| REPLACE('xxx.mysql.com','x','w') |
+----------------------------------+
| www.mysql.com                    |
+----------------------------------+
1 row in set (0.00 sec)

总结:
a.SPACE(6)返回一个由n个空格组成的字符串。
b.REPLACE(s,s1,s2)使用字符串s2替代字符串s中所有的字符串s1。

11.比较字符串大小的函数STRCMP(s1,s2)
mysql> SELECT STRCMP('txt','txt2'),STRCMP('txt2','txt'),STRCMP('txt','txt');
+----------------------+----------------------+---------------------+
| STRCMP('txt','txt2') | STRCMP('txt2','txt') | STRCMP('txt','txt') |
+----------------------+----------------------+---------------------+
|                   -1 |                    1 |                   0 |
+----------------------+----------------------+---------------------+
1 row in set (0.02 sec)

总结:
STRCMP(s1,s2)若所有的字符串均相同,则返回0;若根据当前分类次序,第一个参数小于第二个,则返回-1,其他情况返回1.

12.获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len)
mysql>  SELECT SUBSTRING('breakfast',5) AS col1,
    ->  SUBSTRING('breakfast',5,3) AS col2,
    -> SUBSTRING('lunch',-3) AS col3,
    -> SUBSTRING('lunch',-5,3) AS col4;
+-------+------+------+------+
| col1  | col2 | col3 | col4 |
+-------+------+------+------+
| kfast | kfa  | nch  | lun  |
+-------+------+------+------+
1 row in set (0.00 sec)

mysql> SELECT MID('breakfast',5) AS col1,
    -> MID('breakfast',5,3) AS col2,
    -> MID('lunch',-3) AS col3,
    -> MID('lunch',-5,3) AS col4;
+-------+------+------+------+
| col1  | col2 | col3 | col4 |
+-------+------+------+------+
| kfast | kfa  | nch  | lun  |
+-------+------+------+------+
1 row in set (0.00 sec)

总结:
a.SUBSTRING(s,n,len)带有len参数的格式,从字符串s返回一个长度同len字符相同的子字符串。
b.起始于位置n,也可能对n使用一个负值,若为负值,则子字符串的位置起始于字符串结尾n字符,即倒数第n个字符,二不是字符串的开头位置。
c.MID(s,n,len)与SUBSTRING(s,n,len)的作用相同。

13.匹配子串开始位置的函数
mysql> SELECT LOCATE('ball','foatball'),POSITION('ball'IN'football'),INSTR('football','ball');
+---------------------------+------------------------------+--------------------------+
| LOCATE('ball','foatball') | POSITION('ball'IN'football') | INSTR('football','ball') |
+---------------------------+------------------------------+--------------------------+
|                         5 |                            5 |                        5 |
+---------------------------+------------------------------+--------------------------+
1 row in set (0.00 sec)

总结:
LOCATE(str1,str2)、POSITION(str1 IN str)和INSTR(str str1)3个函数的作用相同,返回字符串str1在字符串str的开始位置。

14.字符串逆序的函数REVERSE(s)
mysql> SELECT REVERSE('abc');
+----------------+
| REVERSE('abc') |
+----------------+
| cba            |
+----------------+
1 row in set (0.00 sec)

总结:
REVERSE(s)将字符串s反转,返回的字符串的顺序和s字符串顺序相反。

15.返回指定位置的字符串的函数
mysql> SELECT ELT(3,'1str','2nd','3rd'),ELT(3,'net','os');
+---------------------------+-------------------+
| ELT(3,'1str','2nd','3rd') | ELT(3,'net','os') |
+---------------------------+-------------------+
| 3rd                       | NULL              |
+---------------------------+-------------------+
1 row in set (0.00 sec)

总结:
ELT(N,字符串1,字符串2,字符串3,…,字符串M)若N=1,则返回字符串1,若N=2,则返回字符串2,依次类推。若N小于1或大于参数的数目,则返回NULL。

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

mysql> SELECT FIELD('Hi','hihi','Hey','Hi','bas') as col1,
    -> FIELD('Hi','Hey','Lo','foo') as col1;
+------+------+
| col1 | col1 |
+------+------+
|    3 |    0 |
+------+------+
1 row in set (0.00 sec)

总结:
FIELD(s,s1,s2,…)返回字符串s在列表s1,s2,…中第一次出现的位置,在找不到s的情况下,返回值为0.如果s为NULL,则返回值为0,原因是NULL不能同任何值进行同等比较。

17.返回子串位置的函数FIND_IN_SET(s1,s2)
mysql> SELECT FIND_IN_SET('Hi','hihi,Hey,Hi,bas');
+-------------------------------------+
| FIND_IN_SET('Hi','hihi,Hey,Hi,bas') |
+-------------------------------------+
|                                   3 |
+-------------------------------------+
1 row in set (0.00 sec)

总结:
a.FIND_IN_SET(s1,s2)返回字符串s1在字符串列表s2中出现的位置,字符串列表是一个由多个逗号‘,’分开的字符串组成的列表。
b.如果s1不在s2或s2为空字符串,则返回值为0.
c.如果任意一个参数为NULL,则返回值为NULL。
d.这个函数在第一个参数包含一个逗号‘,’时将无法正常运行。

18.选取字符串的函数MAKE_SET(x,s1,s2,…)
mysql> SELECT MAKE_SET(1,'a','b','c') as col1,
    -> MAKE_SET(1|4,'hello','nice','world') as col2,
    -> MAKE_SET(1|4,'hello','nice',NULL,'world') as col3,
    -> MAKE_SET(0,'a','b','c') as col4;
+------+-------------+-------+------+
| col1 | col2        | col3  | col4 |
+------+-------------+-------+------+
| a    | hello,world | hello |      |
+------+-------------+-------+------+
1 row in set (0.00 sec)

总结:
MAKE_SET(x,s1,s2,…)返回由x的二进制数指定的相应位的字符串组成的字符串,s1对应比特1,s2对应比特01以此类推。s1,s2…中的NULL值不会添加到结果中。

解释:
1的二进制为0001,4的二进制为0100,1与4进行或操作之后的二进制为0101,从右到左第1位和第3位为1。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值