日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL字符串拼接函数介绍

發布時間:2023/12/20 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL字符串拼接函数介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在MySQL中,實現字符串拼接主要有以下3種函數:
concat(x,y,…)
concat_ws(分隔符,x,y,…)
group_concat(distinct xxx order by asd/desc yyy separator ‘分隔符’)

一、concat函數

concat()函數用于將多個字符串連接成一個字符串

格式:concat(str1,str2,…)

– mysql concat() –
SELECT CONCAT(‘I’,‘love’,‘somebody’); # Ilovesomebody
SELECT CONCAT(‘I’,NULL,‘somebody’); # NULL
SELECT CONCAT(14.4); # 14.4

注意:

如果有任何一個參數為NULL,則返回值為NULL;
  如果所有參數為非二進制字符串,則返回非二進制字符串;
  如果含有任一二進制字符串,則返回一個二進制字符串;
  數字參數也會被轉化為與之相等的二進制字符串格式,若要避免這種情況,可使用顯式類型 cast,例如:
SELECT CONCAT(CAST(col_a AS CHAR), col_b) FROM table_xxx;

二、concat_ws函數

concat_ws函數,concat with separator 分隔符,是concat()的特殊形式。

格式:concat_ws(separator, str1, str2,…)

第一個參數為分隔符,放在兩個要連接的字符串之間。
SELECT CONCAT_WS(’-’,‘First’,‘Second’,‘Third’); # First-Second-Third
SELECT CONCAT_WS(’-’,‘First’,NULL,‘Third’); # First-Third

注意:

如果分隔符為NULL,則結果為NULL;
  函數會忽略任何分隔符參數后的NULL值;
  函數不會忽略任何空字符串,但是會忽略所有NULL值;

三、group_concat函數

group_concat函數,實現分組查詢之后的數據進行合并,并返回一個字符串結果。group_concat函數用于將多個字符串拼接成一個字符串。而MySql默認的最大拼接長度為1024個字節,一般情況下是夠用的,但如果數據量特別大,就會存在java層返回內容被截斷的問題,這時,為了保證拼接數據的完整性,就需要手工修改配置文件的group_concat_max_len屬性值了。

格式:group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )

通過使用distinct可以排除重復值;
  如果希望對結果中的值進行排序,可以使用order by子句;
  separator是一個字符串值,默認為逗號分隔。
SELECT id,
GROUP_CONCAT(DISTINCT num ORDER BY num DESC SEPARATOR ‘$’) AS cont
FROM test.t_2
GROUP BY id;

結果:
group_concat還可以與concat_ws嵌套使用,實現更加復雜功能。

四、其他字符串連接雜談

“+” & || (不行)
Mysql使用“+”進行字符拼接的時候,會嘗試將兩端的字段值轉換為數字類型,如果轉換失敗則認為字段值為0
oracle使用||進行字符串拼接,concat 只支持2個參數,可以多個嵌套使用
MS 使用+進行字符串拼接

group_concat應用

用了group_concat后,select里如果使用了limit是不起作用的
用group_concat連接字段的時候是有長度限制的,并不是有多少連多少,可以使用group_concat_max_len系統變量,設置允許的最大長度group_concat將某一字段的值按指定的字符進行累加,系統默認的分隔符是逗號
一個簡單的例子:
– 按f_b進行分組查詢,將每組中的f_a進行累加
select group_concat(f_a) from t_one group by f_b;

修改默認的分隔符
– separator 是一個關鍵字,后面跟著要進行分隔的字符
select group_concat(f_a separator ‘_’) from t_one group by f_b;

排序
select group_concat(f_a order by f_a separator ‘_’) from t_one group by f_b;

和concat使用
group_concat默認返回的是BLOB大對象,可以使用concat,返回字符串,還可以在返回的內容,在加入其它的數據。
【參數修改】:group_concat_max_len
??group_concat_max_len是針對java的jdbc對mysql查詢結果集中group_concat函數列的值的轉換長度,而不是針對group_concat函數本身能夠容納的字符長度。

舉例:group_concat_max_len默認值為1024,如果sql執行結果集中group_concat對應列的長度為1025,則會被截掉1個長度;但是group_concat函數本身還是會查詢返回1025個長度的字符。

查看當前mysql group_concat_max_len
show variables like ‘group_concat_max_len’;

如果未曾修改會得到下面結果:
在這里插入圖片描述

修改mysql group_concat_max_len
如果不方便重啟mysql 可以在mysql狀態通過命令設置,,可以設置作用范圍,臨時修改,重啟服務后悔失效,如:

SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;

注:此種方式在mysql重啟后會讀取配置文件重新設置,會導致設置失效,所以建議依舊要修改配置文件

永久需修改配置文件:my.ini
在[mysqld]下新增配置:group_concat_max_len = 102400,重啟。
特別的,有時我們并不知需要多大的字節才能滿足需求,此種情況可以考慮不設置最大字節(即采用最大字節數)即在配置文件設置group_concat_max_len=-1 ( 4294967295 = 2^32 - 1)

總結

以上是生活随笔為你收集整理的MySQL字符串拼接函数介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。