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            |
  +-------------------+