前言
標題幾乎已經說的很清楚了,在oracle中,concat()函數和 “ || ” 這個的作用是一樣的,是將不同列拼接在一起;那麼wm_concat()是將同屬於一個組的(group by)同一個字段拼接在一起變成一行。mysql是一樣的,只不過mysql用的是group_concat()這個函數,用法是一樣的,這裏就不過多介紹了。大家可以直接戳這篇文章 瞭解 淺析MySQL中concat以及group_concat的使用
這裏我就以oracle介紹爲主了,mysql同樣的方法使用,就是換一個函數就是了。
wm_concat()和concat()具體的區別
oracle中concat()的使用 和 oracle中 “ || ” 的使用
這兩個都是拼接字段或者拼接字符串的功能。
oracle中:
concat只能連接兩個字符串或者兩個字段,|| 可以多次使用,拼接n個字符串或者字段。
select concat('aaa','bbb') from dual /*結果爲:aaabbb*/
select 'aaa'||'bbb'||'ccc'||'ddd' from dual /*結果爲:aaabbbcccddd*/
如果concat()拼接多個話,就會報錯,
mysql中
concat()的使用,是可以連接多個字符串或者字段的。
select concat('aaa','bbb','ccc','ddd') from dual /*mysql中執行 結果爲:aaabbbcccddd*/
wm_concat()的使用
我看了大多數博客對wm_concat()這個個函數的介紹,我覺得都介紹的不是很完美,他們都是簡單的說 這個是合併列的函數,但是我總結的概括爲:把同組的同列字段合併變爲一行(會自動以逗號分隔)。什麼意思呢,舉個例子唄。
現在我有一張成績表,如圖,
stuid 同學學號 coursename 課程名稱 score 課程成績
說明一下,設計成績表的時候,這裏的coursename最好是設計成courseid,和課程表去關聯,但是這裏我就是測試,爲了更簡單的表達效果,所以這裏暫時就以課程名稱來設計了,希望大神不要噴我設計的表有問題哈,我數據庫設計表也還是挺厲害的勒,嘿嘿,自戀一下。
問題:現在要將同一個同學的所有課程成績以一行展示,sql怎麼寫呢?
/*簡單的合併同一個同學的課程*/
select stuid,wm_concat(coursename)
from stu_score
group by stuid
我們再優化一下SQL,將成績也放進去
/*同一個同學的課程+成績*/
select stuid,wm_concat(coursename || '(' || score||')')
from stu_score
group by stuid
如果不想用逗號分隔,可以用replace函數替換逗號爲你想要的分隔符號,
/*同一個同學的課程+成績,指定想要的分隔符*/
select stuid,replace(wm_concat(coursename || '(' || score||')'),',','---')
from stu_score
group by stuid
mysql是一樣的用法,把wm_concat 換成 group_concat()就可以啦,具體可以參考這篇文章的使用:淺析MySQL中concat以及group_concat的使用
不知道大家學會這個wm_concat()這個函數的用法了嗎
參考文章:
https://www.cnblogs.com/qianyuliang/p/6649983.html
https://blog.csdn.net/Mary19920410/article/details/76545053
https://blog.csdn.net/u012027874/article/details/78505529
感謝原作者的分享,讓技術人能夠更快的解決問題