在本教學中,您將學習使用MySQL CONCAT
和CONCAT_WS
函數將兩個或多個字串連接在一起的各種方法。
要連接兩個或多個引用的字串值,請將字串放在一起,如下所示:
SELECT 'MySQL ' 'String ' 'Concatenation';
執行上面查詢語句,得到以下結果 -
mysql> SELECT 'MySQL ' 'String ' 'Concatenation';
+----------------------------+
| MySQL |
+----------------------------+
| MySQL String Concatenation |
+----------------------------+
1 row in set
與其他資料庫管理系統相比,MySQL字串連接更為清晰。 例如,如果您使用PostgreSQL或Oracle,則必須使用字串連接運算符||
。 在Microsoft SQL Server中,您可以使用加法算術運算符(+
)連接字串值。
除了使用空格進行字串連接之外,MySQL還提供了兩個連接字串值的函數:CONCAT
和CONCAT_WS
。
MySQL CONCAT函數
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
請參見示例資料庫(zaixiandb)中的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(contactFirstName,' ',contactLastName) Fullname
FROM
customers;
執行上面查詢語句,得到以下結果 -
mysql> SELECT
concat(contactFirstName,' ',contactLastName) Fullname
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
MySQL CONCAT_WS函數:使用分隔符號連接字串
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(CHAR(13),
CONCAT_WS(' ', contactLastname, contactFirstname),
addressLine1,
addressLine2,
CONCAT_WS(' ', postalCode, city),
country,
CONCAT_WS(CHAR(13), '')) AS Customer_Address
FROM
customers;
執行上面查詢語句,得到以下結果 -
+----------------------------------------------------------------------------------+
| Customer_Address |
+----------------------------------------------------------------------------------+
| Schmitt Carine
54, rue Royale
44000 Nantes
France |
************ 此處省略一大波數據 *******
在本教學中,您已經學習了如何使用MySQL CONCAT
和CONCAT_WS
函數將一個或多個字串值連接到成單個字串。