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

SQLでカンマ区切りを扱う方法について、サンプルコード付きでまとめてます。

SQLでカンマ区切りを扱う方法サンプルコード集

数値を3桁毎にカンマ区切り整形するにはformat関数

桁の大きな数値を読みやすく3桁毎にカンマを入れて整形するには、format関数が便利です。

第一引数に整形対象の数値、第二引数に小数点位置を指定します。以下は、MySQLで実行した例です。

mysql> select format(111111111,0);
+---------------------+
| format(111111111,0) |
+---------------------+
| 111,111,111         |
+---------------------+
1 row in set (0.00 sec)

Oracleなどformat関数が用意されていないデータベースエンジンもあります。第一引数に整形元の値を、第二引数にフォーマット用の文字列を指定するんですね。

なお、指定したフォーマット文字列で桁あふれが起こると結果が”###…”になってしまうなど、注意点もあります。

SELECT TO_CHAR(-10000,'L99G999D99MI') "Amount"
     FROM DUAL;

Amount
--------------
  $10,000.00-

参考)Oracle公式:TO_CHAR(数値)

selectした結果をカンマ区切りのCSV形式で出力する方法

select into でファイルにクエリ結果を出力する場合、fields teminated byでカラム間の区切り文字をカンマに指定することで、CSV形式での出力が可能になります。以下は、MySQLでの例です。

SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM test_table;

【関連記事】
MySQLでSELECTしたデータをCSVファイルに出力してみよう!【MAC環境】

CSV出力の方法はデータベースエンジンごとに異なり、標準の方法は用意されていません。例えば、Oracleの場合はカラム間を「||」で接続し、間にカンマを挿入することで、CSVファイルとしてクエリ結果を出力することができます。

関連)SELECT文の検索結果をCSVへ出力するSQL(Oracle) – Qiita

SQL Serverだと、CLIコマンドのsqlcmdにフィールドセパレータとして,を区切ることでCSV形式での出力が可能です。

sqlcmd -S localhost -E -i test.sql -v param='9999' -b -s, -W -o test.csv

参考)SQLServerのデータをCSVに出力するバッチファイルを作ろう – Qiita

postgreSQLの場合も、CLIコマンドのpsqlにフィールドセパレータとしてカンマを指定することで可能です。

psql データベース名 -c "SQL文" -A -F, > CSVファイル名

参考)PostgreSQLのCSV出力(Export)方法 – Qiita

select結果の行をカンマ区切りで出力する(group_concat)

selectの抽出結果を通常の縦方向ではなく、横方向にカンマ区切りで出力するにはgroup_concatを使用します。以下は、MySQLでの例です。

mysql> select group_concat(dept_name) from departments;
+-------------------------------------------------------------------------------------------------------------+
| group_concat(dept_name)                                                                                     |
+-------------------------------------------------------------------------------------------------------------+
| Customer Service,Development,Finance,Human Resources,Marketing,Production,Quality Management,Research,Sales |
+-------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

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

group_concatはMySQL独自の関数です。データベースエンジンによって、別の関数や機能を組み合わせて実現可能です。

例えば、OracleではLISTAGGという関数が用意されています。

SELECT LISTAGG(last_name, '; ')
         WITHIN GROUP (ORDER BY hire_date, last_name) "Emp_list",
       MIN(hire_date) "Earliest"
  FROM employees
  WHERE department_id = 30;

Emp_list                                                     Earliest
------------------------------------------------------------ ---------
Raphaely; Khoo; Tobias; Baida; Himuro; Colmenares            07-DEC-02

Oracle公式:LISTAGG

SQL Serverでは、FOR XML PATH(”)を使って実現できます。

参考)[SQL Server] 縦に並んだデータを横にカンマ区切りの列データで取得する方法 │ Web備忘録

postgreSQLでは、array_agg()などの配列操作関数を組み合わせて、group_concatと同等の機能が実現できます。

参考)PostgreSQL で MySQL の GROUP_CONCAT() 関数を実現する|Everything you do is practice

まとめ

ポテパンダの一言メモ
  • 数値のカンマ区切り編集にはformatなどの関数を使う
  • csv形式でクエリ結果を出力するには、select intoでfields terminated by を指定する
  • クエリ結果を横方向に並べてカンマ区切りするには、group_concatなどの関数を使う

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

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

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

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

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

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

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

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

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

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

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