共通SQL
|| / CONCAT (文字列結合)
複数の文字列やカラムの値を繋げて1つの文字にする
解説
データベースから取得した「姓」と「名」をくっつけたり、数値に「円」という単位を付け足したりする際によく使われるのが文字列結合です。
標準SQLでは ||(パイプライン2本)を使用しますが、RDBMSによって対応状況が大きく異なるため、データベース移行時にバグを生みやすい代表的な構文でもあります。
RDBMSごとの書き方の違い
- PostgreSQL / Oracle DB / SQLite: 標準SQLに準拠した
||演算子が使えます。 - MySQL:
CONCAT()関数を使用するのが一般的です。(※デフォルト設定で||を使うと論理ORとして計算されてしまい、文字列が結合されません)
NULLが含まれていた場合の罠
文字列結合において最も注意すべきはNULLの扱いです。
'A' || NULLのように||でNULLを結合すると、PostgreSQLなどでは結果が NULL になります。- PostgreSQL:
CONCAT('A', NULL)ではNULL引数が無視され、'A' が返ります。 - MySQL:
CONCAT('A', NULL)は引数にNULLを含むため、結果全体が NULL になります。
この挙動の違いを知らないと、「一部のユーザーだけ名前が画面に表示されない」といった不具合に繋がるため、実務では COALESCE() や IFNULL() などでNULLを明示的に処理するのが安全です。
構文
文字列1 || 文字列2
-- または
CONCAT(文字列1, 文字列2)
具体例
SELECT last_name || ' ' || first_name AS full_name FROM users;
この構文を実際に書いて試してみませんか?
SQLエディタを開く