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)
由运行结果可以看到,一个汉字是 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)
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)
由运行结果可知,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)
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)
然后使用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)
不指定连接符, 默认使用逗号连接, 如下:
mysql> select group_concat(num) from temp; +-------------------+ | group_concat(num) | +-------------------+ | 64,11,22 | +-------------------+ 1 row in set (0.33 sec)
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)
由执行结果可知:
- 第一个函数 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)
由结果可以看到,原来所有字母为大写的,全部转换为小写,如“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)
由运行结果可知,返回字符串“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)
由执行结果可知,函数执行之后字符串“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)
由运行结果可以看出,使用 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)
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)
由运行结果可以看出,字符串“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)
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)
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)