concat 和 group concat的陷阱

2021-08-31 01:52:19 字數 2252 閱讀 7683

group_concat:

mysql中group_concat函式能將相同的行組合起來

完整的語法如下:

group_concat([distinct] 要連線的字段 [order by asc/desc 排序字段] [separator '分隔符'])

使用示例:

select * from aa;
+------+------+

| id| name |

+------+------+

|1 | 10|

|1 | 20|

|1 | 20|

|2 | 20|

|3 | 200 |

|3 | 500 |

+------+------+

6 rows in set (0.00 sec)

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)

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的配置節。

到my.cnf的mysqld節點下加上group_concat_max_len =99999……

重啟mysql。

concat:

用來連線字段,或者字元。但是只要被連線的字段中有乙個值為null,則concat得到的就是null。

這是個非常危險的玩意。我相信用concat連線多個欄位的人想要的結果多半不是這樣:

concat(a,b),如果b為null,那麼concat(a,b)=null

我們想要的是這樣的:

連線a,b,如果b為null,那麼連線後應該是a。

這時應該用concat_ws(separator,   str1,   str2,...)

陣列 concat和join方法

doctype html en utf 8 viewport content width device width,initial scale 1.0 document title head concat 陣列的合併 var a 1 2,3 4,5 55,5 var b 0,89,5,2,1,1 陣...

hive函式中concat與concat ws區別

函式用於將多個字串連線成乙個字串。語法 concat str1,str2,返回值 string 特點 如有任何乙個引數為null 則返回值為 null。舉例 案例1 將test1中的字段拼接成乙個字串 test1中的欄位名abc下的資料也為abc,下同 hive select concat abc,...

深度學習中Concat層和Flatten層作用

一些其它層的作用參考 keras各種layer的作用及用法 簡要總結 concat層的功能 concat層實現輸入資料的拼接。concat層是乙個實用程式層,它將多個輸入blob連線到乙個輸出blob 按照給定的axis,注意除了規定的axis以外,被concat的輸入bolb的其他維度的size必...