MySQL字符串的拼接方法

一、CONCAT(str1,str2,str3, …)

示例:

mysql> select concat("我愛你","何晶","一萬年");
+------------------------------------------+
| concat("我愛你","何晶","一萬年")         |
+------------------------------------------+
| 我愛你何晶一萬年                         |
+------------------------------------------+
1 row in set (0.00 sec)

mysql>

-- 拼接 null 字符串
mysql> select concat("我愛你","何晶","一萬年",'null');
+-------------------------------------------------+
| concat("我愛你","何晶","一萬年",'null')         |
+-------------------------------------------------+
| 我愛你何晶一萬年null                            |
+-------------------------------------------------+
1 row in set (0.00 sec)

mysql>

-- 拼接 null

mysql> select concat("我愛你","何晶","一萬年",null);;;
+-----------------------------------------------+
| concat("我愛你","何晶","一萬年",null)         |
+-----------------------------------------------+
| NULL                                          |
+-----------------------------------------------+
1 row in set (0.00 sec)

mysql>

二、CONCAT_WS(separator,str1,str2,…)

說明 :

string1,string2代表字符串,concat_ws 代表 concat with separator,第一個參數是其它參數的分隔符。
分隔符的位置放在要連接的兩個字符串之間。
分隔符可以是一個字符串,也可以是其它參數。
如果分隔符爲 NULL,則結果爲 NULL。
函數會忽略任何分隔符參數後的 NULL 值

示例:

mysql> select concat_ws("何晶","我愛你","一萬年");
+---------------------------------------------+
| concat_ws("何晶","我愛你","一萬年")         |
+---------------------------------------------+
| 我愛你何晶一萬年                            |
+---------------------------------------------+
1 row in set (0.00 sec)

mysql>

-- 分隔符爲 null
mysql> select concat_ws(null,"我愛你何晶","一萬年");;;
+-----------------------------------------------+
| concat_ws(null,"我愛你何晶","一萬年")         |
+-----------------------------------------------+
| NULL                                          |
+-----------------------------------------------+
1 row in set (0.00 sec)

mysql>

-- 被拼接的字符串爲 null (null的位置不在第一位)
mysql> select concat_ws("一萬年","我愛你何晶",null);
+-----------------------------------------------+
| concat_ws("一萬年","我愛你何晶",null)         |
+-----------------------------------------------+
| 我愛你何晶                                    |
+-----------------------------------------------+
1 row in set (0.00 sec)

mysql>

-- 被拼接的字符串爲 null (null的位置在第一位)
mysql> select concat_ws("一萬年",null,"我愛你何晶");
+-----------------------------------------------+
| concat_ws("一萬年",null,"我愛你何晶")         |
+-----------------------------------------------+
| 我愛你何晶                                    |
+-----------------------------------------------+
1 row in set (0.00 sec)

mysql>

三、 MySQL中 GROUP_CONCAT 函數

完整語法

group_concat([DISTINCT] 要連接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

示例:

-- 基礎查詢 sc表
mysql> select * from  sc limit 10;
+-------+------+------+-------+
| sc_id | s_id | c_id | score |
+-------+------+------+-------+
|     1 |    1 |    1 |    23 |
|     2 |    1 |    2 |    93 |
|     3 |    1 |    3 |    55 |
|     4 |    1 |    4 |    96 |
|     5 |    1 |    5 |    15 |
|     6 |    1 |    6 |    88 |
|     7 |    1 |    7 |    91 |
|     8 |    1 |    8 |    94 |
|     9 |    1 |    9 |    95 |
|    10 |    1 |   10 |    92 |
+-------+------+------+-------+
10 rows in set (0.00 sec)

-- 以 c_id 分組,把 score 字段的值打印在一行,逗號分隔(默認)
mysql> select c_id,group_concat(score) from sc where sc_id < 20 group by c_id limit 10;
+------+---------------------+
| c_id | group_concat(score) |
+------+---------------------+
|    1 | 23,73               |
|    2 | 93,90               |
|    3 | 55,29               |
|    4 | 96,75               |
|    5 | 15,87               |
|    6 | 88,9                |
|    7 | 91,86               |
|    8 | 94,100              |
|    9 | 95,42               |
|   10 | 92                  |
+------+---------------------+
10 rows in set (0.00 sec)

mysql>

-- 以 c_id 分組,把 score 字段的值打印在一行,分號分隔
mysql> select c_id,group_concat(score separator ";") from sc where sc_id < 20 group by c_id limit 10;
+------+-----------------------------------+
| c_id | group_concat(score separator ";") |
+------+-----------------------------------+
|    1 | 23;73                             |
|    2 | 93;90                             |
|    3 | 55;29                             |
|    4 | 96;75                             |
|    5 | 15;87                             |
|    6 | 88;9                              |
|    7 | 91;86                             |
|    8 | 94;100                            |
|    9 | 95;42                             |
|   10 | 92                                |
+------+-----------------------------------+
10 rows in set (0.00 sec)

mysql>

-- 以 sc_id 分組,把去冗餘的 score 字段的值打印在一行
mysql> select c_id,group_concat(distinct score) from sc where sc_id < 120 group by c_id limit 10;
+------+-------------------------------------+
| c_id | group_concat(distinct score)        |
+------+-------------------------------------+
|    1 | 13,15,22,23,32,39,62,71,73,79,83,86 |
|    2 | 9,15,20,46,49,50,52,54,68,75,90,93  |
|    3 | 9,14,15,20,29,35,55,56,65,80,87,98  |
|    4 | 13,18,34,35,37,50,53,73,75,77,88,96 |
|    5 | 7,15,21,23,24,43,63,66,69,87        |
|    6 | 8,9,25,27,28,52,55,60,73,76,81,88   |
|    7 | 8,11,18,20,29,35,67,84,86,91,100    |
|    8 | 6,12,24,26,73,76,77,84,87,94,95,100 |
|    9 | 17,32,39,42,45,50,58,67,76,95,97    |
|   10 | 4,8,19,27,33,52,53,61,78,86,92      |
+------+-------------------------------------+
10 rows in set (0.00 sec)

mysql>

-- 以sc_id分組,把 score 字段的值打印在一行,逗號分隔,以 score 排倒序
mysql> select c_id,group_concat(score order by score desc) from sc where sc_id < 120 group by c_id;
+------+-----------------------------------------+
| c_id | group_concat(score order by score desc) |
+------+-----------------------------------------+
|    1 | 86,83,79,73,71,62,39,32,23,22,15,13     |
|    2 | 93,90,75,68,54,52,50,49,46,20,15,9      |
|    3 | 98,87,80,65,56,55,35,29,20,15,14,9      |
|    4 | 96,88,77,75,73,53,50,37,35,34,18,13     |
|    5 | 87,69,66,63,43,24,23,23,21,15,7,7       |
|    6 | 88,81,76,73,60,55,52,28,27,25,9,8       |
|    7 | 100,91,86,84,67,35,29,20,18,11,11,8     |
|    8 | 100,95,94,87,84,77,76,73,26,24,12,6     |
|    9 | 97,95,76,67,58,58,50,45,42,39,32,17     |
|   10 | 92,86,78,61,53,52,33,27,19,8,4          |
+------+-----------------------------------------+
10 rows in set (0.01 sec)

mysql>

四、直接 + (其實都不算是拼接了,算是相加)

示例:

mysql> select "n1m1"+999;
+------------+
| "n1m1"+999 |
+------------+
|        999 |
+------------+
1 row in set, 1 warning (0.00 sec)

mysql> select "n1m1"+"999";
+--------------+
| "n1m1"+"999" |
+--------------+
|          999 |
+--------------+
1 row in set, 1 warning (0.00 sec)

mysql> select "1"+"999";
+-----------+
| "1"+"999" |
+-----------+
|      1000 |
+-----------+
1 row in set (0.00 sec)

mysql> select 1+"999";
+---------+
| 1+"999" |
+---------+
|    1000 |
+---------+
1 row in set (0.00 sec)

mysql> select "asf"+"mimi";
+--------------+
| "asf"+"mimi" |
+--------------+
|            0 |
+--------------+
1 row in set, 2 warnings (0.00 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章