mysql中的concat的幾個函數使用


  今天看人家用group_concat,才感覺這里懂得有些少,學習一番。

 一:concat基礎函數

1.函數用法

  語法:concat(str1, str2,...)

  將多個字符串連接成一個字符串。

 

2.示例

select concat(contract_id, ' - ', bd_code, ' - ', bd_name) as tmp from t_plm_contract_monitor;

  效果:

  

  可以看到,這里是將每行的數據,所有的字段,進行相連。

 

3.注意點

  如果一個字段是null,則返回這行都是一個null【網上說法】。

  進行試驗:

  

 

  結果發現:

  這一行不是空的null,試驗出真知,沒有的地方是不顯示。

  不知道是不是版本的問題。這個mysql版本是5.6.

 

二:concat_ws

1.說明

  上面的寫法感覺有點累啊,因為每個鏈接符都要寫,是否有簡單的方式的?

  這個函數的使用方式如下:

  concat_ws(separator, str1, str2, ...)

  只要在第一個位置上,指定分隔符就不會出現問題。

 

2.試驗

select concat_ws(' - ',contract_id,bd_code,bd_name) as tmp from t_plm_contract_monitor;

  效果:

  

 

 

3.說明

  感覺使用的使用是挺好的。

 

4.少數據會怎樣呢?

  試驗效果如下,仍然是不顯示。

  

 

 

三:group_concat

1.說明

  這個是今天的重頭戲。

 

2.舉例

  通過合同id進行分組,找到最小的id。

select contract_id, min(id) from t_plm_contract_monitor group by contract_id;

  結果:

  

 

 

3.更加多的需求

  上面的問題比較簡單,但是我想知道一個contract_id對應的id有哪些呢,又不會出現多行contract_id一樣的數據。

  這個時候就可以使用這個函數了。

 

4.舉例

select contract_id, GROUP_CONCAT(id) from t_plm_contract_monitor group by contract_id;

  結果:

  

 

 

5.更加優化的用法

  為啥這么說呢,因為上面的用法中,沒有說明如何使用的分隔符。

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

  

6.試驗一下

  讓id進行倒敘,使用‘-’進行分割。

select contract_id, GROUP_CONCAT(distinct id order by id desc separator '-') from t_plm_contract_monitor group by contract_id;

  結果:

  

 

 

7.還一種用法

select group_concat(mm.contract_id) from (
select contract_id from t_plm_contract_bill_term_monitor where is_deleted = 0
GROUP by bill_term_end_date,contract_id HAVING count(*) > 1
) mm

  結果:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM