データベース 広告

SQLで文字列を結合、分割する

記事内に商品プロモーションを含む場合があります

今回はSQLを用いて文字列を結合、分割を行う方法を紹介します。

特に文字列の結合は実際の業務でもよく使うので、やり方をしっかりと把握しておきたいところです。

文字列の分割は基本的に使う機会がないかと思いますが、こういう方法があるということだけを理解しておくといいかと思います。

SQLで文字列を結合する

SQLで文字列を結合するのはいくつか方法がありますが、CONCAT関数を使って文字列を結合する方法を知っておくと良いでしょう。

CONCATはOracleでは引数を2つしか指定できないので使う場合は工夫が必要ですが、SQL Serverなどでは3つ以上の引数を指定することが出来ます。

SQL ServerでCONCATを使った文字列結合は以下のように書くことが出来ます。

SELECT CONCAT('税込', '1000', '円') AS 税込金額;

これを実行してみると以下のような結果になります。

3つの文字列である「税込」、「1000」、「円」を結合して、「税込1000円」が結果に表示されている様子が確認できたのが確認できます。

このCONCATを使う方法は多くのメジャーなSQLで使えるため、これ一つ覚えておくとMySQLを使うことになっても、PostgreSQLを使うことになっても問題なく文字列の結合が行えます。


二つめの方法としては’+’演算子を使う方法です。

こちらの方が分かりやすいという方もいるかもしれません。

例えば、以下のように記述を行います。

SELECT '税込' + '1000' + '円' AS 税込金額2;

これを実行すると、「税込1000円」と表示される様子が確認できます。


三つめの方法としては、‘||’演算子を使う方法です。

この書き方が出来るのはPostgreSQL、Oracleなどですが、SQL ServerもSQL Server 2025 (17.x) プレビューで利用できるようになりましたので、正式版で使える日もそう遠くはないかと思います。

書き方としては’+’を使う代わりに’||’を使うだけです。

SELECT '税込' || '1000' || '円' AS 税込金額3;

このSQLを実行しても「税込1000円」と表示される様子が確認できます。

SQLで文字列を分割する

SQLでカンマ区切りなどで区切り文字を指定して文字列を分割して複数の行にするのはSQL Serverなど一部のSQLでしか実装されていません。

しかもSQL Serverの場合は2016以降という条件付きです。

他のSQLにも区切り文字指定で文字列を分割する機能があるものはありますが、インデックス番号を指定して1つしか取り出せないものがほとんどです。

実際の業務でSQLを組む場合も文字列の分割を組む機会はほとんどなく、SQLにやらせるのではなく、SQLの結果を受け取った後に、プログラム側で文字列分割する方が多いかと思います。


SQL Serverで区切り文字指定で文字列を分割するには、以下のような書き方を行います。

SELECT value AS 干支 from string_split('子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥', ',');

これを実行すると、以下のようにカンマ区切りで文字列を分割して行ごとに格納してくれます。

ただし、クエリの内容を見て頂くと分かるのですが、この書き方は結構クセがあります。

string_splitを実行した結果がテーブルに格納され、列名がvalueとなっているため、なかなか使いづらい仕様になっています。

そのため、string_splitはこんなものがあるという程度に理解して、文字列のカンマ区切りでの分割などはプログラム側で行うのが賢明ではないかと思います。

まとめ

今回お話ししたことをまとめますと、以下のようになります。

  1. 文字列の結合にはCONCAT関数、+演算子、||演算子が存在する。
  2. 文字列の指定文字での分割はSQL Serverなどの一部のSQLには実装されているものの、基本的に無いものと思った方がいい

文字列の結合はクエリで取得した結果をクエリ内で加工できるので、使用頻度はそこそこあります。

しかし、文字列の指定文字での分割はクエリ内に書くことはほとんどありません。

理由としては書き方にクセがあったり、SQLによっては用意されていないこともあるからです。

そのため、クエリを実行した結果をプログラム側で受け取り、そこで文字列の分割を行う方法が現実的な方法になります。

クエリでの文字列結合は実装可能、文字列分割は実装困難もしくは実装不可能、このように覚えておいていただければ、実際の開発の作業の時に困らないのではないかと思います。

今回の記事はここまでとなります。
また次の記事でお会いしましょう。