mysql中字符串拼接函数_MySQL字符串连接函数
一、CONCAT(str1,str2,…)
返回結果為連接參數產生的字符串。如有任何一個參數為NULL ,則返回值為 NULL。
select concat(s_id, "--", s_bar_code) from `t_storage_order_detail` WHERE `s_sn` LIKE '%R2016091200002%' LIMIT 0, 1000;
+--------------------------------+
| concat(s_id, "--", s_bar_code) |
+--------------------------------+
| 204--6930000003111 |
| 205--6930000003128 |
| 206--6930000003135 |
| 207--6930000003142 |
| 208--6930000003159 |
| 209--6930000003166 |
| 210--6930000003173 |
| 211--6930000003180 |
| 212--6930000003197 |
| 213--6930000003203 |
| 214--6930000003210 |
| 215--6930000003227 |
+--------------------------------+
二、MySQL中 concat_ws 函數
使用方法:
CONCAT_WS(separator,str1,str2,...)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一個參數是其它參數的分隔符。分隔符的位置放在要連接的兩個字符串之間。分隔符可以是一個字符串,也可以是其它參數。
mysql> select concat_ws("--",s_id,s_bar_code) from `t_storage_order_detail` WHERE `s_sn` LIKE '%R2016091200002%' LIMIT 0, 1000;
+---------------------------------+
| concat_ws("--",s_id,s_bar_code) |
+---------------------------------+
| 204--6930000003111 |
| 205--6930000003128 |
| 206--6930000003135 |
| 207--6930000003142 |
| 208--6930000003159 |
| 209--6930000003166 |
| 210--6930000003173 |
| 211--6930000003180 |
| 212--6930000003197 |
| 213--6930000003203 |
+---------------------------------+
28 rows in set
三、MySQL中 group_concat 函數
完整的語法如下:
group_concat([DISTINCT] 要連接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
mysql> select group_concat("'",s_bar_code,"'") from `t_storage_order_detail` WHERE `s_sn` LIKE '%R2016091200002%' LIMIT 0, 1000;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| group_concat("'",s_bar_code,"'") |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| '6930000003111','6930000003128','6930000003135','6930000003142','6930000003159','6930000003166','6930000003173','6930000003180','6930000003197','6930000003203','6930000003210','6930000003227','6930000003234','6930000003241','6930000003258','6930000003265','6930000003272','6930000003289','6930000003296','6930000003302','6930000003319','6930000003326','6930000003333','6930000003340','6930000003357','6930000003364','6930000003371','6930000003388' |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
基本查詢
mysql> select * from aa;
+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200?? |
|3 | 500?? |
+------+------+
6 rows in set (0.00 sec)
以id分組,把name字段的值打印在一行,逗號分隔(默認)
mysql> select id,group_concat(name) from aa group by id;
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)
以id分組,把name字段的值打印在一行,分號分隔
mysql> select id,group_concat(name separator ';') from aa group by id;
+------+----------------------------------+
| id| group_concat(name separator ';') |
+------+----------------------------------+
|1 | 10;20;20 |
|2 | 20|
|3 | 200;500?? |
+------+----------------------------------+
3 rows in set (0.00 sec)
以id分組,把去冗余的name字段的值打印在一行,
逗號分隔
mysql> select id,group_concat(distinct name) from aa group by id;
+------+-----------------------------+
| id| group_concat(distinct name) |
+------+-----------------------------+
|1 | 10,20|
|2 | 20?? |
|3 | 200,500 |
+------+-----------------------------+
3 rows in set (0.00 sec)
以id分組,把name字段的值打印在一行,逗號分隔,以name排倒序
mysql> select id,group_concat(name order by name desc) from aa group by id;
+------+---------------------------------------+
| id| group_concat(name order by name desc) |
+------+---------------------------------------+
|1 | 20,20,10?? |
|2 | 20|
|3 | 500,200|
+------+---------------------------------------+
3 rows in set (0.00 sec)
1.int字段的連接陷阱?當你用group_concat的時候請注意,連接起來的字段如果是int型,一定要轉換成char再拼起來, 否則在你執行后(ExecuteScalar或者其它任何執行SQL返回結果的方法)返回的將不是一個逗號隔開的串, 而是byte[]。?該問題當你在SQLyog等一些工具中是體現不出來的,所以很難發現。
select group_concat(ipaddress) from t_ip 返回逗號隔開的串
select group_concat(id) from t_ip 返回byte[]
select group_concat(CAST(id as char)) from t_dep 返回逗號隔開的串
select group_concat(Convert(id , char)) from t_dep 返回逗號隔開的串
附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函數可用來獲取一個類型的值,并產生另一個類型的值。?這個類型 可以是以下值其中的 一個:?BINARY[(N)]?CHAR[(N)]?DATE?DATETIME?DECIMAL?SIGNED [INTEGER]?TIME?UNSIGNED [INTEGER]
2.長度陷阱 用group_concat連接字段的時候是有長度限制的,并不是有多少連多少。但你可以設置一下。
使用group_concat_max_len系統變量,你可以設置允許的最大長度。
程序中進行這項操作的語法如下,其中 val 是一個無符號整數: SET [SESSION | GLOBAL] group_concat_max_len = val;
若已經設置了最大長度, 則結果被截至這個最大長度。?在SQLyog中執行?SET GLOBAL group_concat_max_len = 10 后,
重新打開SQLyog,設置就會生效。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql中字符串拼接函数_MySQL字符串连接函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4j 禁止类输出日志_logback 日
- 下一篇: MySQL数据步骤管控_数据管理的发展过