Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのconcatについてまとめています。

SQLのconcatの使い方

CONCATはCONCATENATEの略で「文字連結する」関数

mysql> select concat(emp_no, ' : ', first_name, ' ', last_name) from employees limit 10;
+---------------------------------------------------+
| concat(emp_no, ' : ', first_name, ' ', last_name) |
+---------------------------------------------------+
| 10001 : Georgi Facello                            |
| 10002 : Bezalel Simmel                            |
| 10003 : Parto Bamford                             |
| 10004 : Chirstian Koblick                         |
| 10005 : Kyoichi Maliniak                          |
| 10006 : Anneke Preusig                            |
| 10007 : Tzvetan Zielinski                         |
| 10008 : Saniya Kalloufi                           |
| 10009 : Sumant Peac                               |
| 10010 : Duangkaew Piveteau                        |
+---------------------------------------------------+
10 rows in set (0.00 sec)

【関連記事】
SQL concat 複数文字列を連結する NULLが入っていた場合は無視 

concat_wsは区切り文字を指定する

MySQL、SQL Server、PostgreSQLでは、concat_wsを使って文字列間の区切り文字を指定することが可能です。

以下は、3つのカラムの区切り文字にカンマを指定して文字列連結した例です。

mysql> select concat_ws(',', emp_no, first_name, last_name) from employees limit 10;
+-----------------------------------------------+
| concat_ws(',', emp_no, first_name, last_name) |
+-----------------------------------------------+
| 10001,Georgi,Facello                          |
| 10002,Bezalel,Simmel                          |
| 10003,Parto,Bamford                           |
| 10004,Chirstian,Koblick                       |
| 10005,Kyoichi,Maliniak                        |
| 10006,Anneke,Preusig                          |
| 10007,Tzvetan,Zielinski                       |
| 10008,Saniya,Kalloufi                         |
| 10009,Sumant,Peac                             |
| 10010,Duangkaew,Piveteau                      |
+-----------------------------------------------+
10 rows in set (0.00 sec)

「カラム間に区切り文字を入れる」「最後のカラムの後ろには区切り文字を入れない」というのは手動でおこなうと結構面倒です。csv形式の出力をおこないたいときなどに、役立つでしょう。

【関連記事】
SQLでカンマ区切りを扱うサンプルコード集 formatやCSV、group_concatの例 

連結文字列に1つでもNULLが含まれていると、結果がNULLになる

MySQL、Oracle、PostgreSQLでは、連結文字列にNULLが1つでもあると、結果がNULLになります。以下はMySQLでの実行例です。

mysql> select concat( emp_no, first_name, last_name, NULL) from employees limit 10;
+----------------------------------------------+
| concat( emp_no, first_name, last_name, NULL) |
+----------------------------------------------+
| NULL                                         |
| NULL                                         |
| NULL                                         |
| NULL                                         |
| NULL                                         |
| NULL                                         |
| NULL                                         |
| NULL                                         |
| NULL                                         |
| NULL                                         |
+----------------------------------------------+
10 rows in set (0.00 sec)

SQL Serverの場合、concat内ではNULLは空文字として扱われるため、結果がNULLにはなりません。プラス記号で連結した場合はNULLになります。

select concat('a','b',NULL);

----
ab


select 'a'+'b'+NULL;

----
(null)

なお、SQL ServerにはconcatでのNULL自動変換をオン・オフするためのオプションが用意されています。SET CONCAT_NULL_YIELDS_NULL OFFとすることで、他のDBMS同様、concat内で一つでもNULLが使用されていた場合、結果はNULLとなります。

参考)SET CONCAT_NULL_YIELDS_NULL (Transact-SQL) – SQL Server | Microsoft Docs

まとめ

ポテパンダの一言メモ
  • SQLのconcatは文字列を連結する関数
  • concat_wsで、区切り文字列を指定して連結が可能。CSV形式生成に便利
  • concatにNULLが混入していると結果もNULLとなるが、SQL Serverは例外

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。