Mysql提供了两个连接字符串值的函数:CONCAT
和CONCAT_WS
。
MySQL CONCAT()
函数需要一个或多个字符串参数,并将它们连接成一个字符串。CONCAT()
函数需要至少一个参数,否则会引起错误。
下面说明了CONCAT()
函数的语法。
CONCAT(string1,string2, ... );
CONCAT()
函数在连接之前将所有参数转换为字符串类型。如果任何参数为NULL
,则CONCAT()
函数返回NULL
值。
以下语句连接两个引用的字符串:MySQL
和CONCAT
。
SELECT CONCAT('MySQL','CONCAT');
执行上面查询语句,得到以下结果 :
mysql> SELECT CONCAT('MySQL','CONCAT');
+--------------------------+
| CONCAT('MySQL','CONCAT') |
+--------------------------+
| MySQLCONCAT |
+--------------------------+
1 row in set
如果添加NULL
值,则CONCAT
函数将返回一个NULL
值,如下所示:
mysql> SELECT CONCAT('MySQL',NULL,'CONCAT');
+-------------------------------+
| CONCAT('MySQL',NULL,'CONCAT') |
+-------------------------------+
| NULL |
+-------------------------------+
1 row in set
假设数据库中有一customers
表,其结构如下所示:
mysql> desc customers;
+------------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| customerNumber | int(11) | NO | PRI | NULL | |
| customerName | varchar(50) | NO | | NULL | |
| contactLastName | varchar(50) | NO | | NULL | |
| contactFirstName | varchar(50) | NO | | NULL | |
| phone | varchar(50) | NO | | NULL | |
| addressLine1 | varchar(50) | NO | | NULL | |
| addressLine2 | varchar(50) | YES | | NULL | |
| city | varchar(50) | NO | | NULL | |
| state | varchar(50) | YES | | NULL | |
| postalCode | varchar(15) | YES | | NULL | |
| country | varchar(50) | NO | | NULL | |
| salesRepEmployeeNumber | int(11) | YES | MUL | NULL | |
| creditLimit | decimal(10,2) | YES | | NULL | |
+------------------------+---------------+------+-----+---------+-------+
13 rows in set
要获取联系人的全名,您可以使用CONCAT
函数将名字,空格,姓氏连接,如下查询语句:
SELECT
CONCAT(customerFirstName, ' ', customerLastName)
FROM
customers
执行上面查询语句,得到以下结果:
+--------------------------+
| Fullname |
+--------------------------+
| Carine Schmitt |
| Jean King |
| Peter Ferguson |
| Janine Labrune |
| Jonas Bergulfsen |
***** 此处省略了一大波数据 ****
| Sue Taylor |
| Thomas Minsu |
| Valarie Franco |
| Tony Snowden |
+--------------------------+
122 rows in set
使用CONCAT函数时有一个问题需要注意,就是当要拼接的数据有一个为NULL时,那么最后拼接的字符串只会返回NULL。
MySQL提供了一种特殊形式的CONCAT()
函数:CONCAT_WS()
函数。CONCAT_WS()
函数将两个或多个字符串值与预定义的分隔符相连接。
下面说明了CONCAT_WS()
函数的语法:
CONCAT_WS(seperator,string1,string2, ... );
第一个参数是其他参数:string1
,string2
,...
的分隔符。
CONCAT_WS
函数在字符串参数之间添加分隔符,并返回单个字符串,并在字符串参数之间插入分隔符。
以下语句连接两个字符串值:Max
和Su
,并用逗号分隔这两个字符串:
SELECT CONCAT_WS(',','Max','Su');
执行上面查询语句,得到以下结果:
mysql> SELECT CONCAT_WS(',','Max','Su');
+---------------------------+
| CONCAT_WS(',','Max','Su') |
+---------------------------+
| Max,Su |
+---------------------------+
1 row in set
当且仅当作为分隔符的第一个参数为NULL
时,CONCAT_WS
函数才返回NULL
。请参阅以下示例:
mysql> SELECT CONCAT_WS(NULL ,'Jonathan', 'Minsu');
+--------------------------------------+
| CONCAT_WS(NULL ,'Jonathan', 'Minsu') |
+--------------------------------------+
| NULL |
+--------------------------------------+
1 row in set
与CONCAT
函数不同,CONCAT_WS
函数在分隔符参数之后跳过NULL
值。 换句话说,它忽略NULL
值。
mysql> SELECT CONCAT_WS(',', 'Jonathan', 'Minsu', NULL);
+-----------------------------------------+
| CONCAT_WS(',','Jonathan', 'Minsu',NULL) |
+-----------------------------------------+
| Jonathan,Minsu |
+-----------------------------------------+
1 row in set
以下语句使用CONCAT_WS
函数构造完整的地址:
SELECT
CONCAT_WS(' ', customerFirstName, customerLastName)
FROM
customer
执行上面查询语句,得到以下结果:
+--------------------------+
| Fullname |
+--------------------------+
| Carine Schmitt |
| Jean King |
| Peter Ferguson |
| Janine Labrune |
| Jonas Bergulfsen |
***** 此处省略了一大波数据 ****
| Sue Taylor |
| Thomas Minsu |
| Valarie Franco |
| Tony Snowden |
+--------------------------+
122 rows in set
基于Nginx+Supervisord+uWSGI+Django1.11.1+Python3.6.5构建