MySQL中常见字符串函数
1、CHAR_LENGTH(S)函数
CHAR_LENGTH(S)函数返回字符串S中的字符个数。使用示例如下:
mysql> SELECT CHAR_LENGTH('hello'), CHAR_LENGTH('你好'), CHAR_LENGTH(' ');
+----------------------+-----------------------+------------------+
| CHAR_LENGTH('hello') | CHAR_LENGTH('你好') | CHAR_LENGTH(' ') |
+----------------------+-----------------------+------------------+
| 5 | 2 | 1 |
+----------------------+-----------------------+------------------+
一个字母、汉字和空格的字符个数都是1。
CHARACTER_LENGTH(S)函数的作用与CHAR_LENGTH(S)函数相同。
2、 LENGTH(S) 函数
LENGTH(S)函数返回字符串S的长度,这里的长度指的是字节数。使用示例如下:
mysql> SELECT LENGTH('hello'), LENGTH('你好'), LENGTH(' ');
+-----------------+------------------+-------------+
| LENGTH('hello') | LENGTH('你好') | LENGTH(' ') |
+-----------------+------------------+-------------+
| 5 | 6 | 1 |
+-----------------+------------------+-------------+
可以看到,当MySQL使用UTF-8编码或utf8mb4编码时,一个字母占用的长度为1个字节、一个汉字占用的长度为3个字节、一个空格占用的长度为1个字节。
3 CONTRACT(S1,S2,…,Sn)函数
CONCAT(S1,S2,…Sn)函数将字符串S1,S2,…,Sn合并为一个字符串。使用示例如下:
mysql> SELECT CONCAT('hello', ' ', 'world');
+-------------------------------+
| CONCAT('hello', ' ', 'world') |
+-------------------------------+
| hello world |
+-------------------------------+
当函数中的任何一个字符串为NULL时,结果返回NULL。使用示例如下:
mysql> SELECT CONCAT('hello', NULL, 'world');
+--------------------------------+
| CONCAT('hello', NULL, 'world') |
+--------------------------------+
| NULL |
+--------------------------------+
4 CONCAT_WS(X,S1,S2…Sn)函数
CONCAT_WS(X,S1,S2,…,Sn)函数将字符串S1,S2,…,Sn拼接成一个以X分隔的字符串,其中,X可以是一个字符串,也可以是其他合法的参数。
mysql> SELECT CONCAT_WS(',','a','b');
+------------------------+
| CONCAT_WS(',','a','b') |
+------------------------+
| a,b |
+------------------------+
如果分隔符X为NULL,则结果返回NULL。
mysql> SELECT CONCAT_WS(NULL, 'a','b');
+--------------------------+
| CONCAT_WS(NULL, 'a','b') |
+--------------------------+
| NULL |
+--------------------------+
如果字符串S1,S2,…,Sn中的任何一个字符串为NULL,则函数会忽略为NULL的字符串。
mysql> SELECT CONCAT_WS(',','a',NULL,'b');
+-----------------------------+
| CONCAT_WS(',','a',NULL,'b') |
+-----------------------------+
| a,b |
+-----------------------------+
5 INSERT(oldstr, x, y, replacestr)函数
INSERT(oldstr,x,y,replacestr)函数将字符串oldstr从第x位置开始的y个字符长度的子字符串替换为replacestr。
将字符串hello world中的hello替换为hi。
mysql> SELECT INSERT('hello world',1,5,'hi');
+--------------------------------+
| INSERT('hello world',1,5,'hi') |
+--------------------------------+
| hi world |
+--------------------------------+
6、 LEFT(str,x)函数/RIFHT(str,x)函数
LEFT(str,x)函数返回字符串str最左边的x个字符组成的字符串,如果x的值为NULL,则返回NULL。
RIGHT(str,x)函数返回字符串str最右边的x个字符组成的字符串,如果x的值为NULL,则返回NULL。
mysql> SELECT RIGHT('hello world', 5), RIGHT('hello world', NULL);
+-------------------------+----------------------------+
| RIGHT('hello world', 5) | RIGHT('hello world', NULL) |
+-------------------------+----------------------------+
| world | NULL |
+-------------------------+----------------------------+
7、 LTRIM(S)函数/RTRIM(S)函数/TRIM(S)函数
LTRIM(S)函数用于去除字符串S左边的空格。
RTRIM(S)函数用于去除字符串S右边的空格。
TRIM(S)函数用于去除字符串S两边的空格。
mysql> SELECT TRIM(' binghe ');
+--------------------+
| TRIM(' binghe ') |
+--------------------+
| binghe |
+--------------------+
TRIM(substr FROM str)函数用于删除字符串str首尾的子字符串substr,如果未指定substr,则默认删除空格。使用示例如下:
mysql> SELECT TRIM('hi' FROM 'hibinghehi'), TRIM(' binghe ');
+------------------------------+-------------------+
| TRIM('hi' FROM 'hibinghehi') | TRIM(' binghe ') |
+------------------------------+-------------------+
| binghe | binghe |
+------------------------------+-------------------+
8、 REPLACE(S,A,B)函数
REPLACE(S,A,B)函数用字符串B替换字符串S中出现的所有字符串A,并返回替换后的字符串。使用示例如下:
mysql> SELECT REPLACE('hello world, hello mysql', 'hello', 'hi');
+----------------------------------------------------+
| REPLACE('hello world, hello mysql', 'hello', 'hi') |
+----------------------------------------------------+
| hi world, hi mysql |
+----------------------------------------------------+
9、 STRCMP(S1, S2)函数
STRCMP(S1,S2)函数用于比较字符串S1和字符串S2的ASCII码值的大小。如果S1的ASCII码值比S2的ASCII码值小,则返回-1;如果S1的ASCII码值与S2的ASCII码值相等,则返回0;如果S1的ASCII码值大于S2的ASCII码值,则返回1。使用示例如下:
mysql> SELECT STRCMP('a', 'b'), STRCMP('c', 'b'), STRCMP('a','a');
+------------------+------------------+-----------------+
| STRCMP('a', 'b') | STRCMP('c', 'b') | STRCMP('a','a') |
+------------------+------------------+-----------------+
| -1 | 1 | 0 |
+------------------+------------------+-----------------+
10、 SUBSTR(S,X,Y)函数
字符串截取函数,SUBSTR(S,X,Y)函数返回从字符串S中从第X个位置开始,长度为Y的子字符串。当X的值小于0时,则将距离S结尾的第X个字符作为起始位置。使用示例如下:
mysql> SELECT SUBSTR('binghe',1,4), SUBSTR('binghe',1,6), SUBSTR('binghe', -2, 2);
+-------------------------+-------------------------+----------------------------+
| SUBSTR('binghe',1,4) | SUBSTR('binghe',1,6) | SUBSTR('binghe', -2, 2) |
+-------------------------+-------------------------+----------------------------+
| bing | binghe | he |
+-------------------------+-------------------------+----------------------------+
1 row in set (0.00 sec)
mysql> SELECT SUBSTR('binghe',0,2), SUBSTR('binghe',7,2), SUBSTR('binghe',1,0);
+-------------------------+-------------------------+-------------------------+
| SUBSTR('binghe',0,2) | SUBSTR('binghe',7,2) | SUBSTR('binghe',1,0) |
+-------------------------+-------------------------+-------------------------+
| | | |
+-------------------------+-------------------------+-------------------------+
SUBSTRING(S,X,Y)函数\ MID(S,X,Y)函数的作用与SUBSTR(S,X,Y)函数相同。
11、 SPACE(X)函数
SPACE(X)函数返回一个由X个空格组成的字符串。使用示例如下:
# 返回了一个由6个空格组成的字符串
mysql> SELECT CONCAT('*', SPACE(6), '*');
+----------------------------+
| CONCAT('*', SPACE(6), '*') |
+----------------------------+
| * * |
+----------------------------+
12、 LOCATE(substr, str)函数/ POSITION(substr IN str)函数 / INSTR(str,substr)函数
LOCATE(substr,str)函数返回字符串substr在字符串str中的位置。使用示例如下:
mysql> SELECT LOCATE('he', 'binghe');
+------------------------+
| LOCATE('he', 'binghe') |
+------------------------+
| 5 |
+------------------------+
注意:MySQL中,字符串的位置是从1开始的。
POSITION(substr IN str)函数作用与LOCATE(substr,str)函数相同,返回字符串substr在字符串str中的位置。使用示例如下:
mysql> SELECT POSITION('he' IN 'binghe');
+----------------------------+
| POSITION('he' IN 'binghe') |
+----------------------------+
| 5 |
+----------------------------+
INSTR(str,substr)函数的作用与LOCATE(substr,str)函数相同,返回字符串substr在字符串str中的位置。使用示例如下:
mysql> SELECT INSTR('binghe','he');
+----------------------+
| INSTR('binghe','he') |
+----------------------+
| 5 |
+----------------------+
13、 FIELD(S,S1,S2,…Sn)函数
FIELD(S,S1,S2,…,Sn)函数返回字符串S在字符串列表中第一次出现的位置。当字符串列表中不存在S时,则返回0;当S为NULL时,则返回0。使用示例如下:
mysql> SELECT FIELD('l', 'hello', 'world'), FIELD('a', 'hello', 'world'), FIELD(NULL, 'hello', 'world');
+------------------------------+------------------------------+---------------------
| FIELD('l', 'hello', 'world') | FIELD('a', 'hello', 'world') | FIELD(NULL, 'hello', 'world') |
+------------------------------+------------------------------+---------------------
| 0 | 0 | 0 |
+------------------------------+------------------------------+---------------------
14、 REVERSE(S)函数
字符串反转,REVERSE(S)函数返回与字符串S顺序完全相反的字符串,即将字符串S反转。使用示例如下:
mysql> SELECT REVERSE('binghe');
+-------------------+
| REVERSE('binghe') |
+-------------------+
| ehgnib |
+-------------------+