SQLを自動的に見やすく整形してくれる、SQLフォーマッターをご紹介します。
いずれも無料で利用可能です。
オンラインSQLフォーマッター
Instant SQL Formatter
多機能で、かゆいところに手が届くSQL整形ツールです。
- 広告控えめで軽い
- MYSQL、SQLServer、Oracle、DB2他に対応
- 出力は、SQL、PHP、C#、Java、VB、VC、Pro*C、Pro*Cobolに対応
- 大文字化・小文字化をテーブル名、カラム名、関数名などきめ細かく指定できる
- 整形に関する詳細オプションあり
下記のSQLを、実際に整形してみます。
SELECT i.obj#, i.samplesize, i.dataobj#, Nvl(i.spare1, i.intcols), i.spare6, Decode(i.pctthres$, NULL, NULL, MOD(Trunc(i.pctthres$ / 256), 256)), ist.cachedblk, ist.cachehit, ist.logicalread FROM ind$ i, ind_stats$ ist, (SELECT enabled, Min(cols) unicols, Min(To_number(Bitand(defer, 1))) deferrable#, Min(To_number(Bitand(defer, 4))) valid# FROM cdef$ WHERE obj# = :1 AND enabled > 1 GROUP BY enabled) c WHERE i.obj# = c.enabled(+) AND i.obj# = ist.obj#(+) AND i.bo# = :1 ORDER BY i.obj#
整形後のSQLは以下の通り。
SELECT i.obj#, i.samplesize, i.dataobj#, Nvl(i.spare1,i.intcols), i.spare6, Decode(i.pctthres$,NULL,NULL,Mod(Trunc(i.pctthres$/256),256)), ist.cachedblk, ist.cachehit, ist.logicalread FROM ind$ i, ind_stats$ ist, ( SELECT enabled, Min(cols) unicols, Min(To_number(Bitand(defer,1))) deferrable#, Min(To_number(Bitand(defer,4))) valid# f rom cdef$ WHERE obj#=:1 AND enabled > 1 GROUP BY enabled) c WHERE i.obj#=c.enabled(+) AND i.obj# = ist.obj#(+) AND i.bo#=:1 ORDER BY i.obj#
サブクエリを使った複雑なSQLがキレイに整形されています。
また、整形とは少し違いますが、SQLをビジュアライズするSQL Flowというツールも同ページから利用可能です。
SQLフォーマッター
日本語メニューで利用できるシンプルな整形ツール
- 出力形式 Perlに対応
- 改行コードを\r\n(DOS形式)か、\n(Linux形式)か選べる
- インデントをタブにするかスペースにするか選べる
多機能な「Instant SQL Formatter」が対応していない「インデントがタブ」「出力がPerl形式対応」という点で、貴重なツール。
SELECT employees.first_name, employees.last_name, dept_emp.from_date, dept_emp.to_date FROM dept_emp, employees WHERE dept_emp.emp_no = employees.emp_no
出力をPerl形式で整形した結果がこちら。
"SELECT " . " employees.first_name, " . " employees.last_name, " . " dept_emp.from_date, " . " dept_emp.to_date " . "FROM " . " dept_emp, " . " employees " . "WHERE " . " dept_emp.emp_no = employees.emp_no "
Format SQL Statements Online
シンプルなSQL整形ツールです。
- 出力形式Pythonに対応
- 全てのコメントを全削除する機能あり
上記SQLをPython形式で出力した結果です。
sql = ('SELECT employees.first_name, employees.last_name, dept_emp.from_date, dept_emp.to_date ' 'FROM dept_emp, employees WHERE dept_emp.emp_no = employees.emp_no ')
エディタのプラグイン版 SQLフォーマッター
ネットに繋がっていない環境で使えるのがプラグインタイプのSQLフォーマッター。
秀丸、サクラエディタ、Eclipse用のSQLフォーマッターが公開されていますが、あまりメンテされていないようです。
そんな中、2019年も継続してメンテされているツールがこちら。
SQL Formatter Plugin for Notepad++
インストールは、プラグインフォルダ下に「SQLinForm」というフォルダを作り、dllファイルをコピーして完了です。
整形したいSQLを選択状態にして、Alt+Shift+Fで整形できます。
整形対象のSQLは、DB2、Oracle、MSAccess、SQL Server、Sybase、MySQL、PostgreSQL、Infomix、Teradata、Netezza SQLに対応。
ただし、無料版だと最低限の整形機能のみ。有料のPro版にすると、全機能を使えるようになります。
SQL Formatterのまとめ
- オンラインのSQL整形ツールはネット環境必須だが、メンテされているものが多い
- Notepad++用のSQL整形ツールのプラグインは無料だと機能限定版