Pack Camo

SQL 整形・フォーマットツール

PostgreSQL、MySQL、SQLite、SQL ServerなどのSQLをインデントして見やすく整えます。

処理はすべて端末内で完結し、アップロードは一切ありません。

SQL

7行 · 442文字

整形済みSQL

整形中…

使っている方言のまま、読みやすいSQLに

このSQL整形ツールは、どんな長さのクエリでも、複数のステートメントでもまとめて受け取り、一貫したインデントに整えます。1行に1句、列と条件をそろえ、キーワードは好みの大文字・小文字に。PostgreSQL、MySQL、SQL ServerからBigQuery、Snowflake、Oracle PL/SQLまで15以上の方言の構文を理解するため、方言固有の演算子、クォート、プレースホルダーはそのまま保たれます。「圧縮」に切り替えれば、設定ファイルやコード内の文字列向けにクエリを1行に戻せます。処理はすべてブラウザ内で行われ、クエリがアップロードされることはありません。

SQLクエリを整形する方法

  1. 1左側のペインにSQLを貼り付けるか、サンプルクエリから始めます。
  2. 2クエリの方言を選びます。単純なクエリならStandard SQLで十分ですが、PostgreSQLの::キャスト、MySQLのバッククォート識別子、SQL Serverの[brackets]などでは正しい方言の選択が重要です。
  3. 3キーワードの大文字・小文字とインデントを設定し、その他のオプションでデータ型・関数の大文字・小文字、表形式インデント、AND/ORの位置、ステートメント間の空行を調整します。
  4. 4入力に合わせて右側に整形済みクエリが表示されます。解析できない場合は、問題のある行と列が表示されます。
  5. 5結果をコピーするか、.sqlファイルとしてダウンロード、または圧縮を選んで1行にまとめます。

なぜSQLを整形するのか

SQLは一度書かれ、何度も読まれます。コードレビューで、スロークエリログで、誰かが深夜2時にデバッグするマイグレーションで。ORMが生成したクエリやログから貼り付けたクエリは、たいてい1行の長大な文字列です。句ごとに改行し、サブクエリをインデントすると、どのテーブルを何で結合し、どの条件がどこに適用されるかという構造が見えてきます。

整形をそろえると差分も小さくなります。チーム全員が同じ方法で整形していれば、条件の変更は段落全体の組み直しではなく、1行の変更として表れます。

整形オプションの説明

キーワードの大文字・小文字
UPPERはSELECT、FROM、WHEREをテーブル名や列名から目立たせる、最も一般的な規約です。lowerは大文字がうるさいと感じるチーム向け。「保持」は入力したとおりに残します。
インデント
スペース2つか4つ、またはタブ。表形式スタイルでは、キーワードを固定幅の列に埋めて、その後の式がそろうようにします。
AND / ORの位置
「行頭」は各論理演算子を行の先頭に置くため、条件を1つだけコメントアウトしやすくなります。「行末」は前の行の末尾に残します。
式の幅
この文字数より短い括弧内の式は1行に収め、長いものは改行します。
演算子を詰める
a + bではなくa+bと書きます。コンパクトですが読みにくくなります。

正しい方言を選ぶ

SQLの方言は意外と多くの点で異なります。識別子のクォート方法("name"、`name`、[name])、プレースホルダーの形(?、$1、:name、@param)、予約語などです。このツールは方言ごとに別の文法を使うため、PostgreSQLの$$関数本体やMySQLの#コメントを誤認しません。

正しいはずのクエリで解析エラーが出たら、まず方言を確認してください。Standard SQLは意図的に厳格で、ベンダー固有の拡張をすべて知っているわけではありません。

SQLの圧縮

圧縮は整形の逆です。コメントを削除し、空白をすべて単一スペースにまとめて、YAMLファイル、環境変数、文字列リテラルに貼り付けられる1行にします。文字列リテラル、クォートされた識別子、ドル引用符の本体はそのままコピーされるので、'two spaces'のような値も2つのスペースが保たれます。/*+ … */形式のオプティマイザヒントとMySQLの実行可能コメント/*! … */は、クエリの動作を変えるため残されます。

JSONを扱っていますか?JSON 整形・検証ツールはJSONドキュメントで同じことを行い、コード圧縮ツールはCSS、JavaScript、HTMLに対応します。

よくある質問

SQLはサーバーに送信されますか?
いいえ。整形と圧縮はすべてブラウザ内で実行されるため、テーブル名、顧客データ、認証情報を含むクエリが端末の外に出ることはありません。
対応しているSQL方言は?
Standard SQL、PostgreSQL、MySQL、MariaDB、SQLite、SQL Server (T-SQL)、Oracle PL/SQL、BigQuery、Snowflake、Amazon Redshift、Spark SQL、Hive、TrinoとPresto、DuckDB、ClickHouse、IBM Db2とDb2 for IBM i、SingleStoreDB、TiDB、Couchbase N1QLです。
整形するとクエリの動作が変わりますか?
いいえ。変わるのは空白と、選んだ場合はキーワード・データ型・関数の大文字・小文字だけです。クォートされた識別子と文字列リテラルは一切変更されません。クォートなしの識別子の大文字・小文字変更はほとんどのデータベースで安全ですが、データベースが区別する場合は「保持」のままにしてください。
解析エラーが出るのはなぜですか?
閉じていない括弧や引用符などの構文エラーがあるか、選択した方言にない構文を使っているかのどちらかです。メッセージに解析が止まった行と列が表示されるので、実際に使っているデータベースの方言を試してください。
複数のステートメントをまとめて整形できますか?
はい。セミコロンで区切れば順に整形され、間には指定した数の空行が入ります。
コメントは残りますか?
整形時は残ります。行コメントもブロックコメントも元の位置に保たれます。圧縮では、オプティマイザヒントとMySQLの実行可能コメントを除き削除されます。
SQLクエリを1行に圧縮するには?
ツール上部で「圧縮」を選びます。コメントが削除され空白がまとめられますが、文字列リテラルとクォートされた識別子は書かれたとおりに保たれます。