SQL concat 複数文字列を連結する NULLが入っていた場合は無視
  • facebookページ
  • twitterページ
  • 2020.03.23

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

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

    concatは、SQL内で文字列を連結する関数です。各データベースでのcontatのサンプルSQLを紹介します。

    concatの構文

    concatは、複数の文字列を結合する関数です。データベースによっては、カンマなどのセパレーターを挿入する関数が用意されているケースもあります。

    MySQLのconat

    MySQLのconatのサンプルSQLを見てきましょう。NULLが入っている場合には無視され、数値の場合は暗黙的に文字列に変換されます。

    参考)MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.5 文字列関数

    CONCAT_WSは、文字列間にセパレータを挿入する関数です。ただし、NULLが入っていた場合には無視されます。

    CSVなどに使う場合は、NULLが含まれていた場合はデフォルト値を返すcoalesce関数などを組み合わせる必要があります。

    【関連記事】
    SQL coalesce 値がNULLの場合の代替値を返す 簡易版のNVLやNULLIFが使えるDBもあり

    下記のSQLは、部署名(departments.dept_name)ごとに所属する職種(titles.title)をカンマで連結して部署ごとに1行づつ表示します。

    実行するとこうなります。

    【関連記事】
    MySQLの文字列結合にはCONCAT。GROUP_CONCATとGROUP BYで複数データ集約

    Oracleのconcat 入れ子にして使う例

    CONCATを入れ子にした例です。

    参考)OracleのCONCAT

    SQL Serverのconcat NULLはVarchar(1)空文字として扱う

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

    なお、SQL Serverでは、引数にNULL値が入っていた場合、varchar(1)の空の文字列として扱います。

    ProgreSQL パイプライン2つでconcatの代替が可能

    参考)PostgreSQLの文字列関数と演算子

    値がNULLでないことがわかっている場合は、||で接続することで文字列の連結が可能です。

    区切り文字を指定可能な、concat_ws関数も用意されています。

    まとめ

    ポテパンダの一言メモ
    • concatは、複数の文字列を連結する関数。
    • 対象の文字列がNULLだった場合は無視される。
    • データベースによっては、文字列間にセパレータ文字列を挿入する関数が用意されている。
    • PostgreSQLなど、「||」で文字列を連結できるケースもある。


    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE