SQLフォーマッター
ログやORMからコピーした1行のSQL文を貼り付けると、フォーマッターがそれをインデントされた句に分け、キーワードの大文字小文字を統一し、SELECT、FROM、WHERE、GROUP BYの前で改行し、射影部分の列を揃えます。MySQL、PostgreSQL、SQL Server、Oracle、SQLite、BigQueryの方言に対応しており、それぞれでキーワードや予約語が少しずつ異なります。
整形の仕組み
-
1
SQLを貼り付け
1行のかたまり、Hibernateからのミニファイ出力など、なんでも。`;`で区切られた複数文もすべて整形されます。
-
2
方言とスタイルを選ぶ
方言はキーワード一覧を制御し、スタイルはカンマの位置(先頭か末尾か)、インデント幅、キーワードの大文字・小文字を制御します。
-
3
トークンは正規表現置換ではなく解析される
トークナイザーが文字列、コメント、括弧、サブクエリを正しく扱います。文字列リテラルはそのまま保持されます。
-
4
整形した出力をコピー
検証済みのSQL。意味は同じで、レイアウトはすっきりします。
整形前と整形後
整形前:
SELECT u.id,u.name,COUNT(o.id) AS orders FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at>='2024-01-01' GROUP BY u.id,u.name HAVING COUNT(o.id)>5 ORDER BY orders DESC LIMIT 50;
整形後(先頭カンマ、大文字キーワード、2スペースインデント):
SELECT
u.id
, u.name
, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o
ON o.user_id = u.id
WHERE u.created_at >= '2024-01-01'
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5
ORDER BY orders DESC
LIMIT 50;
重要なスタイルの選択
- キーワードの大文字と小文字。 UPPERCASEは伝統的で見つけやすいです。小文字は、構文ハイライトのある最新のコードエディタではすっきり見えます。
- 先頭カンマと末尾カンマ。 先頭(
, col)は1つの列をコメントアウトしやすいです。末尾(col,)はテキストとして自然に読めます。 GROUP BYのカンマ位置。 長い句では1行に1つ、短い句ではインラインにすることが多いです。- JOINのインデント。 次の行に
ONを置く(ぶら下げインデント)か、同じ行に置くか。長い条件はぶら下げが向きます。 - サブクエリ。 開きカッコだけでなく、サブクエリ全体をインデントします。
方言ごとの落とし穴
- 識別子におけるMySQLのバッククォートとPostgreSQLのダブルクォート。
WITHCTE、MS SQLはWITHの前に;が必要です。フォーマッターがこれを処理します。- ウィンドウ関数、長い
OVER (...)句は、PARTITION BYとORDER BYを改行で折り返すと読みやすくなります。 - BigQueryには
ARRAY_AGG、STRUCT、テーブルのサフィックス(*_yyyymmdd)があり、トークナイザーはこれらを壊してはいけません。 - Oracleには
(+)の外部結合構文があります。フォーマッターはこれを保持しつつ、レガシーとして印を付けます。
フォーマッターが行わないこと
- バグの修正、不正なJOINは不正なままです。
SELECT *の展開、列リストはスキーマから推測しません。- クエリの最適化、レイアウトのみで、実行計画は扱いません。
- サブクエリのCTEへの書き換え、別の関心事です。
よくある質問
いいえ。純粋に見た目だけです。空白、改行、カンマの位置は動きますが、キーワード、演算子、リテラル、識別子は完全に保持されます。
対応しています。CREATE TABLE、ALTER、CREATE PROCEDURE、トリガー。フォーマッターはブロック構造(BEGIN ... END)やプロシージャ内の行継続も扱います。
本来は壊れないはずです。壊れたなら、おそらく方言の不一致です。方言を切り替えてみてください。再現する不具合は報告してください。バグとして扱います。
Flink SQLやCassandra CQLは似て見えますが、主流のフォーマッターが壊しがちな方言固有のキーワードがあります。慎重に使い、出力が動くことを確認してください。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
JavaScript圧縮ツール
変数名のリネーム、空白の削除、デッドコードの除去、定数畳み込みでJavaScriptを圧縮し、より小さなバンドルを作成します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
FPS カウンター
requestAnimationFrame でブラウザーの FPS を測定。平滑化、最小・最大フレームレート、警告しきい値、任意のグラフに対応。ローカルで動作し、アップロードも API も不要です。
プレースホルダー画像ジェネレーター
1〜4000 pxの画像に色と文字を設定し、PNGで保存できます。外部URLとHTMLもコピーできます。
このツールは他の言語でも利用できます
- Format SQL [ID]
- تنسيق SQL [AR]
- Formateur SQL [FR]
- รูปแบบ SQL [TH]
- Formater SQL [PL]
- Định dạng SQL [VI]
- Formatador SQL [PT]
- SQL-formaterare [SV]
- Formateador SQL [ES]
- SQL-Formatter [DE]
- SQL 포매터 [KO]
- SQL-formatter [NL]
- SQL Biçimlendirici [TR]
- SQL 格式化器 [ZH]
- SQL Formatter [EN]
- Formatter SQL [IT]
- Форматтер SQL [RU]