MySQL教程61-MySQL 字符串函数

LENGTH函数:获取字符串长度

MySQL LENGTH(str) 函数的返回值为字符串的字节长度,使用 uft8(UNICODE 的一种变长字符编码,又称万国码)编码字符集时,一个汉字是 3 个字节,一个数字或字母是一个字节。

【实例】使用 LENGTH 函数计算字符串长度,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT LENGTH('name'),LENGTH('数据库');
+----------------+---------------------+
|LENGTH('name')  | LENGTH('数据库')    |
+----------------+---------------------+
|              4 |                   9 |
+----------------+---------------------+
1 row in set (0.04 sec)
View Code

由运行结果可以看到,一个汉字是 3 个字节,“数据库”字符串占 9 个字节。英文字符的个数和所占的字节相同,一个字符占 1 个字节。

CHAR_LENGTH函数:获取字符串长度

和length函数的区别是, char_length函数单位为字符,不管汉字还是数字或者是字母都算是一个字符。

【实例】使用 char_length函数计算字符串长度,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT LENGTH('name'),LENGTH('数据库'),char_length('name'), char_length('数据库');
+----------------+---------------------+---------------------+--------------------------+
| LENGTH('name') | LENGTH('数据库')    | char_length('name') | char_length('数据库')    |
+----------------+---------------------+---------------------+--------------------------+
|              4 |                   9 |                   4 |                        3 |
+----------------+---------------------+---------------------+--------------------------+
1 row in set (0.00 sec)
View Code

CONCAT函数:字符串拼接

MySQL 中的 CONCAT(sl,s2,...) 函数返回结果为连接参数产生的字符串,或许有一个或多个参数。

若有任何一个参数为 NULL,则返回值为 NULL。若所有参数均为非二进制字符串,则结果为非二进制字符串。若自变量中含有任一二进制字符串,则结果为一个二进制字符串。

【实例】使用 CONCAT 函数连接字符串,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT CONCAT('MySQL','5.7'),CONCAT('MySQL',NULL);
+-----------------------+----------------------+
| CONCAT('MySQL','5.7') | CONCAT('MySQL',NULL) |
+-----------------------+----------------------+
| MySQL5.7              | NULL                 |
+-----------------------+----------------------+
1 row in set (0.03 sec)
View Code

由运行结果可知,CONCAT('MySQL','5.7') 返回两个字符串连接后的字符串;CONCAT(‘MySQL’,NULL) 中有一个参数为 NULL,因此返回结果为 NULL。

CONCAT_WS函数:使用指定分隔符的字符串拼接

语法:CONCAT_WS(separator, str1, str2…), 使用separator连接str1、str2…,如:执行SELECT CONCAT_WS(',','a','b','c')将会输出a,b,c

注意: 
  1. 若分隔符为NULL,则结果为NULL,如:执行SELECT CONCAT_WS(NULL,'a','b','c')将会输出NULL 
  2. 若字符串中存在NULL,则会忽略该字符,如:执行执行SELECT CONCAT_WS(',','a',NULL,'c')将会输出a,c

【实例】使用 CONCAT_WS函数连接字符串,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT CONCAT_WS(NULL,'a','b','c'), CONCAT_WS(',','a',NULL,'c'), CONCAT_WS('-','a', 'b', 'c');
+-----------------------------+-----------------------------+------------------------------+
| CONCAT_WS(NULL,'a','b','c') | CONCAT_WS(',','a',NULL,'c') | CONCAT_WS('-','a', 'b', 'c') |
+-----------------------------+-----------------------------+------------------------------+
| NULL                        | a,c                         | a-b-c                        |
+-----------------------------+-----------------------------+------------------------------+
1 row in set (0.04 sec)
View Code

GROUP_CONCAT函数:连接指定列字符串

语法:GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’])

说明: 将指定列连接起来

【实例】, 例如表temp中name列数据如下:

mysql> select * from temp;
+------+
| num  |
+------+
|   64 |
|   11 |
|   22 |
+------+
3 rows in set (0.00 sec)
View Code

然后使用GROUP_CONCAT函数连接name列, 指定连接符为'-'

mysql> select group_concat(num separator '-') from temp;
+---------------------------------+
| group_concat(num separator '-') |
+---------------------------------+
| 64-11-22                        |
+---------------------------------+
1 row in set (0.00 sec)
View Code

不指定连接符, 默认使用逗号连接, 如下:

mysql> select group_concat(num) from temp;
+-------------------+
| group_concat(num) |
+-------------------+
| 64,11,22          |
+-------------------+
1 row in set (0.33 sec)
View Code

INSERT函数:替换字符串

MySQL 中替换字符串函数 INSERT(s1,x,len,s2) ,  字符串 s1中, 起始于 x 位置开始的len 个字符长的字符串, 用s2替换。

若 x 超过字符串长度,则返回值为原始字符串。假如 len 的长度大于其他字符串的长度,则从位置 x 开始替换。若任何一个参数为 NULL,则返回值为 NULL。

【实例】使用 INSERT 函数进行字符串替换操作,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT INSERT('Football',2,4,'Play') AS col1,
    -> INSERT('Football',-1,4,'Play') AS col2,
    -> INSERT('Football',3,20,'Play') AS col3;
+----------+----------+--------+
| col1     | col2     | col3   |
+----------+----------+--------+
| FPlayall | Football | FoPlay |
+----------+----------+--------+
1 row in set (0.04 sec)
View Code

由执行结果可知:

  • 第一个函数 INSERT('Football',2,4,'Play') 将“Football”从第 2 个字符开始长度为 4 的字符串替换为 Play,结果为“FPlayall”;
  • 第二个函数 ('Football',-1,4,'Play') 中的起始位置 -1 超出了字符串长度,直接返回原字符串;
  • 第三个函数 INSERT('Football',3,20,'Play') 替换长度超出了原字符串长度,则从第 3 个字符开始,截取后面所有的字符,并替换为指定字符 Play,结果为“FoPlay”。

LOWER函数:将字母转换成小写

MySQL 中字母小写转换函数 LOWER(str) 可以将字符串 str 中的字母字符全部转换成小写。

【实例】使用 LOWER 函数将字符串中所有的字母字符转换为小写,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT LOWER('BLUE'),LOWER('Blue');
+---------------+---------------+
| LOWER('BLUE') | LOWER('Blue') |
+---------------+---------------+
| blue          | blue          |
+---------------+---------------+
1 row in set (0.03 sec)
View Code

由结果可以看到,原来所有字母为大写的,全部转换为小写,如“BLUE”,转换之后为“blue”;大小写字母混合的字符串,小写不变,大写字母转换为小写字母,如“Blue”,转换之后为“bule”。

UPPER函数:将字母转换成大写

与函数LOWER相反作用....

LEFT函数:从左侧截取字符串

MySQL 中的 LEFT(s,n) 函数返回字符串 s 最左边的 n 个字符。

【实例】使用 LEFT 函数返回字符串中左边的字符,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT LEFT('MySQL',2);
+-----------------+
| LEFT('MySQL',2) |
+-----------------+
| My              |
+-----------------+
1 row in set (0.04 sec)
View Code

由运行结果可知,返回字符串“MySQL”左边开始的长度为 2 的子字符串,结果为“My”。

RIGHT函数:从右侧截取字符串

与函数LEFT相反作用....

TRIM函数:删除空格

MySQL 中删除空格函数 TRIM(s) 删除字符串 s 两侧的空格。

【实例】SELECT CONCAT('[',TRIM('mobile'),']');输入的 SQL 语句和执行结果如下所示。

mysql> SELECT '[   mobile   ]',CONCAT('[',TRIM('   mobile   '),']');
+----------------+--------------------------------------+
| [   mobile   ] | CONCAT('[',TRIM('   mobile   '),']') |
+----------------+--------------------------------------+
| [   mobile   ] | [mobile]                             |
+----------------+--------------------------------------+
1 row in set (0.07 sec)
View Code

由执行结果可知,函数执行之后字符串“mobile”两边的空格被删除,结果为“mobile”。

REPLACE函数:字符串替换

MySQL 中替换函数 REPLACE(s,s1,s2) 使用字符串 s2 替换字符串 s 中所有的字符串 s1。

【实例】使用 REPLACE 函数进行字符串替换操作,输入的 SQL 语句和执行过程如下所示。

mysql> SELECT REPLACE('aaa.mysql.com','a','w');
+----------------------------------+
| REPLACE('aaa.mysql.com','a','w') |
+----------------------------------+
| www.mysql.com                    |
+----------------------------------+
1 row in set (0.00 sec)
View Code

由运行结果可以看出,使用 REPLACE('aaa.mysql.com','a','w') 将“aaa.mysql.com”字符串的“a”字符替换为“w”字符,结果为“www.mysql.com”。

SUBSTRING函数:截取字符串

MySQL 中获取子串函数 SUBSTRING(s,n,len) 带有 len 参数的格式,从字符串 s 返回一个长度同 len 字符相同的子字符串,起始于位置 n。

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

【实例】使用 SUBSTRING 函数获取指定位置处的子字符串,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT SUBSTRING('computer',3) AS col1,
    -> SUBSTRING('computer',3,4) AS col2,
    -> SUBSTRING('computer',-3) AS col3,
    -> SUBSTRING('computer',-5,3) AS col4;
+--------+------+------+------+
| col1   | col2 | col3 | col4 |
+--------+------+------+------+
| mputer | mput | ter  | put  |
+--------+------+------+------+
1 row in set (0.00 sec)
View Code

SUBSTRING('computer',3) 返回从第 3 个位置开始到字符串结尾的子字符串,结果为“mputer”;SUBSTRING('computer',3,4) 返回从第 3 个位置开始长度为 4 的子字符串,结果为“mput”;

SUBSTRING(computer,-3) 返回从倒数第 3 个位置到字符串结尾的子字符串,结果为“ter”;SUBSTRING(computer,-5,3) 返回从倒数第 5 个位置开始长度为 3 的子字符串,结果为“put”。

REVERSE函数:反转字符串

MySQL 中字符串逆序函数 REVERSE(s) 可以将字符串 s 反转,返回的字符串的顺序和 s 字符串的顺序相反。

【实例】使用 REVERSE 函数反转字符串,输入的 SQL 语句和执行过程如下所示。

mysql> SELECT REVERSE('hello');
+------------------+
| REVERSE('hello') |
+------------------+
| olleh            |
+------------------+
1 row in set (0.00 sec)
View Code

由运行结果可以看出,字符串“hello”经过 REVERSE 函数处理之后所有字符顺序被反转,结果为“olleh”。

INSTR函数:发现指定的字符的位置

INSTR(STR,SUBSTR) 在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX);

STR 被搜索的字符串 
SUBSTR 希望搜索的字符串

在字符串STR里面,字符串SUBSTR出现的第一个位置(INDEX),INDEX是从1开始计算,如果没有找到就直接返回0,没有返回负数的情况。

mysql> SELECT INSTR("abcd",'b'), INSTR("abcd",'f');
+-------------------+-------------------+
| INSTR("abcd",'b') | INSTR("abcd",'f') |
+-------------------+-------------------+
|                 2 |                 0 |
+-------------------+-------------------+
1 row in set (0.00 sec)
View Code

LOCATE函数:发现指定的字符的位置

LOCATE(substr,str) , LOCATE(substr,str,pos)

第一个语法返回字符串 str中子字符串substr的第一个出现位置。第二个语法返回字符串 str中子字符串substr的第一个出现位置, 起始位置在pos。如若substr 不在str中,则返回值为0。

mysql> SELECT LOCATE('def', 'abcdef'), LOCATE('xdef', 'abcdef'), LOCATE('def', 'abcdefghdef', 6);
+-------------------------+--------------------------+---------------------------------+
| LOCATE('def', 'abcdef') | LOCATE('xdef', 'abcdef') | LOCATE('def', 'abcdefghdef', 6) |
+-------------------------+--------------------------+---------------------------------+
|                       4 |                        0 |                               9 |
+-------------------------+--------------------------+---------------------------------+
1 row in set (0.00 sec)
View Code

POSITION函数:发现指定的字符的位置

POSITION(substr IN str)

返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0

mysql> SELECT POSITION('def' in 'abcdef'), POSITION('xdef' in 'abcdef'), POSITION('def' in 'abcdefghdef');
+-----------------------------+------------------------------+----------------------------------+
| POSITION('def' in 'abcdef') | POSITION('xdef' in 'abcdef') | POSITION('def' in 'abcdefghdef') |
+-----------------------------+------------------------------+----------------------------------+
|                           4 |                            0 |                                4 |
+-----------------------------+------------------------------+----------------------------------+
1 row in set (0.00 sec)
View Code
posted @ 2020-08-19 15:36  KILLNPE  阅读(202)  评论(0编辑  收藏  举报