SQL フォーマッター・整形ツール — 11 の方言、圧縮、ハイライト

乱雑な SQL を、PostgreSQL、MySQL、T-SQL、BigQuery などに対応した、読みやすく一貫したインデントのクエリに整形します。ブラウザで動作します。

2 文 · 717 文字
フォーマッターを読み込み中…

すべてブラウザ内で動作します。SQL がサーバーに送信されることはないため、クエリ内のスキーマ名やデータも外部に漏れません。 すべての無料ツールを見る.

不具合や改善できそうな点を見つけましたか?いただいたメッセージはすべて読み、すぐに対応します。

この無料の SQL フォーマッターは、ログや ORM、1 行のマイグレーションから貼り付けたクエリを、読みやすい SQL に整形します。1 行に 1 つの句、一貫したインデント、選んだ大文字・小文字のキーワードです。データベースの方言を選べば、PostgreSQL の :: によるキャストや $$ の関数本体、MySQL のバッククォート、T-SQL の [角かっこ] や @変数、BigQuery や Snowflake の QUALIFY 句などの構文が、崩されることなく正しく理解されます。

整形で変わるのは、空白と、キーワード・データ型・関数名の大文字・小文字だけです。文字列リテラル、引用符付きの識別子、コメントは書かれたとおりに残ります。フォーマッターはレイアウトのために SQL を構文解析する必要があるので、テンプレート化された SQL(dbt や Jinja の {{ }} ブロック)や一部のベンダー固有の文では失敗することがあります。その場合は、どの行と列で止まったかを表示します。圧縮はその逆で、1 行にまとめてコメントを取り除きますが、/*+ INDEX(...) */ のようなオプティマイザーヒントは残します。

使い方

  1. ボックスに 1 つ以上の SQL 文を貼り付けます。最初に結果を確認できるよう、サンプルのクエリが読み込まれています。
  2. データベースが使う方言を選びます。これは特に、引用符、パラメーター、ベンダー固有の構文で重要です。
  3. キーワードの大文字・小文字、インデント、文と文の間の空行の数を設定します。変更すると同時に出力が更新されます。
  4. JSON の設定やシェルのコマンドの中など、クエリを 1 行にする必要がある場合は「圧縮」に切り替えます。
  5. 結果をコピーするか、.sql ファイルとしてダウンロードします。

よくある質問

整形すると SQL クエリの動作は変わりますか?

変わりません。フォーマッターが変えるのは、空白と、SQL データベースが大文字・小文字を区別しないキーワード・データ型・関数の大文字・小文字だけです。文字列の値、引用符付きの識別子("Column"、`col`、[col])、コメントはそのままコピーされるので、クエリは同じ結果を返します。テーブル名や列名の大文字・小文字は変えませんが、例外が 1 つあります。選んだ方言のキーワードでもある引用符なしの名前(たとえば month という名前のエイリアス)は、キーワードの大文字・小文字の設定に従います。引用符なしの名前はほとんどのデータベースで大文字・小文字を区別しないので、問題になることはまれですが、MySQL のテーブル名は Linux では大文字・小文字を区別することがあります。書いたとおりに残すには「そのまま」を選んでください。

どの SQL の方言を選べばよいですか?

お使いのデータベースの方言です。単純な SELECT、INSERT、UPDATE 文なら標準 SQL で問題ありませんが、標準 SQL は PostgreSQL の :: キャストや $1 パラメーター、MySQL のバッククォートの識別子や # コメント、T-SQL の角かっこ、@変数、TOP、Oracle の PL/SQL ブロック、BigQuery や Snowflake の QUALIFY 句を知りません。整形が構文解析エラーで失敗したら、まず正しい方言を選んでみてください。

フォーマッターに「構文解析エラー」と表示されるのはなぜですか?

選んだ方言では想定していないトークンに出くわしたためです。よくある原因は、方言の不一致、閉じていないかっこや引用符、dbt の {{ ref("orders") }} のようなテンプレートのプレースホルダー、パーサーが対応していない手続き型のコードです。ステータス行に行と列が表示され、その下のボックスで該当する文字が示されるので、たいていはそれで問題を見つけられます。

SQL のキーワードは大文字にすべきですか?

それは慣習であって、ルールではありません。キーワードを大文字(SELECT、FROM、WHERE)にすると、テーブル名や列名から構造が際立ち、ドキュメントやスタイルガイドでも最も一般的なスタイルです。dbt やシンタックスハイライトのある最近のエディターを使うチームでは、小文字を好むところも多くあります。どちらかに決めて、すべてに適用してください。このツールはどちらにも変換でき、書いたとおりに残すこともできます。

SQL を圧縮しても安全ですか?

クエリ自体については安全です。圧縮では空白をまとめ、-- と /* */ のコメントを取り除きますが、文字列の中には決して手を触れません。オプティマイザーヒント(/*+ ... */)と MySQL のバージョンコメント(/*! ... */)は動作を変えるので残します。代わりに読みやすさが失われるので、圧縮は受け渡し(JSON の設定、環境変数、ログの 1 行)のためだけに使い、リポジトリには整形した版を残しておいてください。

SQL はサーバーに送信されますか?

いいえ。フォーマッターのライブラリはブラウザにダウンロードされ、そこで動作します。テーブル名、列名、WHERE 句のデータがあなたのマシンから出ることはありません。

フォーマッターを壊す方言の違い

• 識別子の引用符:標準 SQL と PostgreSQL は "ダブルクォート"、MySQL と MariaDB は `バッククォート`、SQL Server は [角かっこ] を使います。間違った方言に設定したフォーマッターは、引用符付きの名前を文字列や演算子と読み違えることがあります。

• パラメーター:PostgreSQL は $1、$2、MySQL と SQLite は ?、SQL Server は @name、Oracle は :name を使います。これらは書かれたとおりに残します。

• キャストと演算子:PostgreSQL には value::type、JSON 演算子の -> と ->>、ILIKE があります。BigQuery と Snowflake にはウィンドウ関数を絞り込む QUALIFY があります。Spark と Hive には LATERAL VIEW があります。

• 文字列と本体:PostgreSQL の関数本体はよく $$ ... $$(ドル引用符)で囲まれ、エスケープ文字列は E'...' を使います。中身はすべて 1 つの文字列として扱われ、そのまま残ります。

• コメント:-- と /* */ はどこでも使えますが、# がコメントの開始になるのは MySQL と MariaDB だけです。T-SQL では #name は一時テーブルです。

読みやすい SQL のための 5 つのルール

公開されている SQL のスタイルガイドは、カンマを先頭に置くか末尾に置くかといった細部では異なりますが、いくつかのレイアウトのルールではほぼ一致しており、このフォーマッターは初期設定でそれらを適用します。

• 主要な句は 1 行に 1 つ:SELECT、FROM、JOIN、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT。

• 選択する列は 1 行に 1 つ。差分でどの列が変わったかが正確にわかります。

• WHERE と ON の中では、AND や OR の後の条件をそれぞれ別の行に。

• サブクエリと CTE の本体は、親より 1 段深くインデント。

• スクリプト内の文と文の間に空行を入れ、各文をひとまとまりとして読めるように。

フォーマッターにできないのは、うまく名前を付けることです。意味のあるテーブルエイリアスを使い(orders o は良いが t1 はだめ)、計算した列には明示的な AS の名前を付けてください。

関連する無料ツール

  • JSON 整形 — JSON を整形、圧縮(minify)、検証し、解析エラーは行と列で位置を示します。ブラウザ上で動作、アップロード不要。
  • JSON → TypeScript 変換 — JSON のサンプルを貼り付けると、TypeScript のインターフェース、Zod スキーマ、JSON Schema、または Go、Python、Java、C#、Kotlin、Swift、Rust の型を生成します。
  • YAML バリデーター — YAML を検証し、各エラーの正確な行と列を表示。yes/no の真偽値、タブ、重複キーなど、パーサーが黙って受け入れてしまうミスも見つけます。
  • 正規表現テスター — サンプルテキストに対して正規表現をテストし、マッチのハイライト、キャプチャグループ、置換のプレビューをリアルタイムで確認。無料、ブラウザ上で動作。
  • 差分チェッカー — テキスト、コード、JSON ファイルの 2 つのバージョンを比較し、どの行、単語、文字が変わったかを正確に確認できます。