.net column
.NET開発者のためのブログメディア

MySQLで文字列結合する方法とは?使用方法や用例を紹介

 
MySQLで文字列結合する方法とは?使用方法や用例を紹介

SE
MySQLでの文字列結合について、教えてください。

PM
では、3つの文字列結合の手段について見ていきましょう。

MySQLでの文字列結合とは?


MySQLには指定した情報、文字列を結合して文字列として返す、文字列結合という機能、関数があります。

この文字列結合機能を使うことで、MySQL内の情報を連結して1つの情報として表示することができます。

この記事では文字列結合をするための方法を紹介します。

MySQLで文字列結合する方法は1つだけ?

MySQLで文字列結合する手段は3つあります。

それは、文字列関数の「CONCAT」を使う方法と、集約関数「GROUP_CONCAT」を使う方法と、ダブルパイプ(||)演算子を使って結合する方法、この3種類があります。

ただし後者のダブルパイプを使う方法は詳しくは後述しますが「sql_mode」の設定を変えることになるので使用するときは注意しましょう。

文字列結合関数「CONCAT」とは

「CONCAT」とは、引数を指定することでその引数を文字列結合された結果の文字列を返す、MySQLでの文字列結合の関数です。

MySQLではこの関数を使うことで、文字列結合を行うことができます。

文字列結合関数「CONCAT」の使い方

CONCATの書式は以下となります。
CONCAT( 文字列1, 文字列2, ・・・文字列N )
このように、関数の中に結合したい情報(文字列)をカンマ区切りで並べることでその文字列たちが順番に文字列結合された文字列が返されます。

MySQLでは一番標準的な文字列結合の方法です。

CONCAT関数を使用することで文字列結合をすることができます。引数は1つ以上を持つ必要があります。

1.引数が文字列だった場合

2.引数に数値が含まれている場合

3.引数にNULLが含まれている場合

このように、NULLが含まれているとNULLが返ってきてしまうので、IFNULL()関数などを使って回避するのが良いでしょう。

文字列結合関数「CONCAT」でテーブルの列から文字列結合するには

name_list
ID family_name given_name year month day
1 山田 太郎 1999 01 20
2 田中 次郎 2010 12 31

上記のようなテーブルがあったとき、「姓」と「名」を繋げて、氏名としたい場合はどうすればいいでしょう。

これも文字列結合関数「CONCAT」を使うこと可能となります。

また、yearとmonthとdayを繋げて、「年月日」にすることも可能です。CONCATでは、列指定と文字列を併用して文字列結合することが可能です。

また、CONCATはSELECT句だけではなく、WHERE句などにも使うことができます。

ただし通常この方法だと索引が使われないため、あまりお勧めしません。

集約関数「GROUP_CONCAT」とは

GROUP_CONCATとは、テーブルの指定した列を指定の順番で並べて、指定の文字で連結していく文字列結合関数です。

厳密には文字列結合関数とは違うのですが、CONCATを「列の結合」、GROUP_CONCATを「行の結合」と考えると似ているので紹介します。

集合関数「GROUP_CONCAT」の使い方

GROUP_CONCATの書式は以下となります。

指定した列を、ORDER BYで指定した順に並べ、SEPARATORで指定した文字列で結合した文字列を返す。という関数になります。

実際の使用例を上げていきましょう。

score_list
ID family_name given_name score
1 山田 太郎 98
2 田中 次郎 70
3 山田 太郎 85

上記のようなテーブルがあった場合、同じfamily_nameでまとめ、scoreをカンマ区切りにして文字列結合するときは以下の方法を取ります。

また、scoreの昇順で並べることも可能です。

また前述のCONCATとも組み合わせることもできます。

このようにしてMySQLではデータをカンマ区切りにしてデータ取得をすることができます。

ダブルパイプ(||)演算子を使って結合する方法

Oracleなどで使われる文字列結合の方法としてダブルパイプ(||)を使って文字列結合する方法がありますが、MySQLではダブルパイプは「OR」演算子として使用されるため、「CONCAT」の代用としては使用することができません。

ただし特定の設定を行うことでCONCATの代用として使用することができるようになります。

以下ではその方法を説明します。

ダブルパイプ演算子をCONCATとして使えるようにするには

ダブルパイプでCONCATと同じく文字列結合の機能にするためには、以下のコマンドを実行します。

このコマンドを実行することで、MySQLでOracleと同様にダブルパイプで文字列結合が可能となります。

このようにダブルパイプでCONCATと同様の動きになるようになります。

このコマンドはセッション中のみ生きる設定で、MySQLを再起動すると無効になります。
設定ファイル(my.ini等)に記述しておくことで常時反映される設定値として動作するため、再起動しても反映された状態となって常に使用可能となります。

ただしこの方法は本来の「OR」の代用として使っているダブルパイプの機能も機能しなくなるため(CONCATの機能になる)、当初の「OR」として使用している機能があると動作しなくなります。システム全体として利用するには考えた上で実施しましょう。

SE
それぞれの関数を使い分けて、複数のレコードの結合に対応できますね。

PM
非常に便利な関数ですので、ぜひマスターして活用してください。

MySQLでの文字列結合についてまとめ

この記事ではMySQLでの文字列結合について説明しました。

列や指定文字列を結合する「CONCAT」と、指定列を指定の文字でレコード(行)で結合する「GROUP_CONCAT」は、情報を整理したり、欲しい情報でのデータ出力をする際に非常に役立つ関数です。

これらの関数をうまく使いこなして、効率的なMySQLプログラマーになりましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags