SQL フォーマッター

0 文字

GeekFormat SQLフォーマッターは、乱雑なSQLクエリ文をすばやく美化・整理します。MySQL、PostgreSQL、SQLite、SQL Server、Oracleなど20種類のデータベース方言に対応し、キーワードの大文字小文字、インデントスタイル、演算子の改行位置、式の幅などのフォーマットオプションをカスタマイズ可能。4種類のワンクリックプリセットスタイルを提供します。SQL圧縮と構文検証機能を内蔵し、ファイルアップロード/ダウンロード、URL共有、キーボードショートカットをサポート。CodeMirror 6エディターに基づいて構文ハイライトと調整可能なパネルレイアウトを提供し、入力後にリアルタイムで自動フォーマット。純粋なブラウザローカル処理で、SQL文がサーバーにアップロードされることはありません。

関連おすすめ

SQL フォーマットについて

SQLフォーマット(SQL Formatting / SQL Beautification)とは、自動化ツールを使用してSQL文の空白文字(改行、インデント、スペース)とキーワードの大文字小文字を調整し、一貫性があり可読性の高いレイアウト構造を与えることです。宣言型クエリ言語であるSQLでは、複雑なクエリは多くの場合、複数テーブルのJOIN、ネストされたサブクエリ、複数のWHERE条件、GROUP BYによるグループ化、HAVINGによるフィルタリング、ORDER BYによるソートなどの複数の句を含みます。フォーマットしないと、すべてのコンテンツが1行に詰め込まれたりインデントが乱れたりして、可読性と保守効率が大幅に低下します。フォーマットされたSQLは、適切な改行とインデントによって各句を独立した行に配置し、インデントによってネスト階層を表現することで、読者がクエリ構造をすばやく理解できるようにします。

なぜSQLフォーマットが重要なのでしょうか?チームコラボレーション環境では、開発者ごとにコーディングスタイルの好みが異なります——キーワードを大文字にする人もいれば小文字にする人もいます;2スペースインデントを使用する人もいれば4スペースやTabを使用する人もいます;ANDを行頭に置く人もいれば行末に置く人もいます。これらのスタイルの違い自体はSQLの実行には影響しませんが、コードレビュー(Code Review)時に意味のないdiffが大量に発生し、レビュアーはどれが本当のロジック変更でどれが単なるフォーマット調整かを区別する必要があります。統一されたSQLフォーマット規約と自動フォーマットツールにより、スタイルに関する議論を排除し、チームがビジネスロジック自体に集中できるようになります。

SQLフォーマットのコアルールには通常、以下の側面が含まれます:第一に、キーワードの大文字小文字——SELECT、FROM、WHERE、JOIN、ON、GROUP BY、ORDER BY、HAVING、LIMIT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROPなどのSQL予約語は、識別子と区別するために通常大文字にします(またはチームの規約に従って一様に小文字にします);第二に、句の改行——各主要な句(SELECT/FROM/WHERE/GROUP BY/ORDER BYなど)を独立した行に配置します;第三に、カラム名の位置揃え——SELECTリストの複数のカラム名をそれぞれ1行に配置して垂直に揃えます;第四に、インデント階層——サブクエリ、JOIN条件、ネストされたCASE式などはインデントを増やすことで階層を表現します;第五に、演算子の位置——AND/ORなどの論理演算子を行頭または行末に統一して配置します。

異なるデータベース方言のSQLフォーマットにはそれぞれ特殊性があります。MySQLはバッククォート(`)で識別子を引用し、PostgreSQLは二重引用符(")を使用し、SQL Serverは角括弧([])を使用します;MySQLはLIMITでページネーションを行い、PostgreSQLはLIMIT/OFFSETをサポートし、SQL ServerはTOPまたはOFFSET/FETCHを使用し、OracleはROWNUMを使用します;PostgreSQLには::型キャスト演算子があり、MySQLにはバッククォートエスケープがあり、SQL Serverには角括弧識別子があります。これらの方言の違いにより、フォーマッターは特定のデータベースの構文要素を認識する必要があります。そうしないと、特殊な構文がエラーと誤判定されたり、キーワードが誤って分割されたりする可能性があります。このツールはsql-formatterライブラリに基づいて実装されており、20種類の主流なSQL方言に対して専門的な構文サポートを提供しています。

SQL圧縮(SQL Minification)はフォーマットの逆の操作であり、特定のシナリオで非常に役立ちます。アプリケーションログに出力されるSQL、ORMフレームワーク(Hibernate、MyBatis、Django ORM、SQLAlchemyなど)が生成するSQL、データベースパフォーマンスモニタリングツールがキャプチャするSQLは、多くの場合、改行のない1行の圧縮形式であり、問題をトラブルシューティングするには非常に不親切です——読むためには先にフォーマットする必要があります。逆に、SQLをコード文字列(Java/Python/JavaScriptでの文字列連結など)に埋め込んだり、設定ファイルに書き込んだり、URLパラメータで渡したり、複数行テキストをサポートしていないチャットツールで共有したりする必要がある場合、1行に圧縮することで改行とインデントによるフォーマットの問題を回避できます。

適切なフォーマットスタイルを選択するには、チームの規約と使用シナリオを考慮する必要があります。キーワード大文字スタイルはSQLの伝統的な慣習であり、印刷時代にはキーワードを大文字にすることで手書きやタイプライターで出力されたSQLが読みやすくなり、現在でも多くのチームや組織で使用されています。キーワード小文字スタイルはGitHubなどの最新のコードプラットフォームでますます人気が高まっています。小文字は視覚的により柔らかく、最新のエディターの構文ハイライトと組み合わせると、キーワードを区別するために大文字小文字に依存する必要がなくなります。インデント幅2スペースはフロントエンド開発者により一般的であり、4スペースはバックエンドのJava/C#開発者により一般的です。Tabインデントにより、開発者ごとにエディターで表示幅をカスタマイズできます。論理演算子AND/ORを行頭に置くと、長い条件リストを読む際に各条件をスキャンしやすくなります;行末に置くと英語の読み方の習慣により適合します。

SQLフォーマットツールの実装原理は主に字句解析(Tokenization)と構文解析に基づいています。sql-formatterなどのライブラリはまずSQL文字列を一連のトークン(キーワード、識別子、リテラル、演算子、句読点、コメントなど)に分解し、次に構文ルール(方言ごとに異なるルールセットがあります)に従ってこれらのトークンを再配置し、適切な位置に改行とインデントを挿入します。汎用コードフォーマッター(Prettierなど)とは異なり、SQLフォーマッターはSQLの特定の構文構造(JOIN...ON条件、CASE WHEN...END式、サブクエリの括弧のネストなど)を理解して正しくインデントする必要があり、単に中括弧や括弧の一致に基づいているだけではありません。

SQLフォーマットツールを使用する際には、以下の点に注意する必要があります:第一に、フォーマットはSQLの意味的な正しさを検証しません——構文は正しくても論理的に誤ったSQL(JOIN条件の書き間違い、WHERE条件の欠落など)はフォーマット後も誤ったままであり、フォーマットはレイアウトを改善するだけでロジックを改善するものではありません;第二に、フォーマットツールはまれにエッジケースで、空白に敏感なシナリオ(文字列定数内のスペース、特定のコメント位置など)で元のSQLと異なる結果を生成する可能性があるため、フォーマット後に簡単な検証を行うことを推奨します;第三に、フォーマットツールが生成したSQLを、特に動的パラメータを含むSQLを、テストせずに本番環境で直接実行しないでください;第四に、機密データ(パスワード、キー、PII)を含むSQLには、(このツールのような)ローカルフォーマットツールを使用し、オンラインツールは使用しないでください。データ漏洩のリスクを回避するためです。

ユースケース

  • 古いプロジェクトを引き継いだ際に、フォーマットされていない大きなSQLストアドプロシージャや複雑なJOINクエリを整理し、ビジネスロジックをすばやく理解
  • チームのコードレビュー前にSQLスタイルを統一し、個人のフォーマット設定によるdiffノイズを排除し、ロジックレビューに集中
  • ログやコンソールからコピーした圧縮された1行のSQLをフォーマットして読みやすくし、問題をトラブルシューティング
  • 技術ドキュメントやブログを作成する際に、SQLサンプルをフォーマットしてドキュメントに埋め込み、専門性と可読性を向上
  • データベースクライアントからエクスポートしたSQLのフォーマットが乱雑な場合、チームの統一スタイルに再フォーマットしてからコードをコミット
  • 面接や技術共有の準備時に、SQLデモ用の文をフォーマットしてPPTやホワイトボードでの説明に使用
  • SQLエラーをトラブルシューティングする際に、乱雑なネストされたサブクエリをフォーマットして括弧の不一致やキーワードの欠落などの構造上の問題を特定
  • ORMフレームワークが生成するSQLログは通常、改行のない圧縮形式であるため、フォーマットして実際に実行されるクエリを分析しやすくする
  • データ移行スクリプトを開発する際に、CREATE TABLE文やINSERT文をフォーマットして保守性を向上
  • 異なるバージョン間のSQLの差分を比較する前にフォーマットを統一し、純粋なフォーマットの違いがコードレビューを妨害するのを回避
  • SQLを学習する際にサンプルクエリをフォーマットし、明確なインデントと改行によってJOIN、サブクエリ、GROUP BYの階層関係を理解
  • 同僚にSQLスニペットを共有する際に、先にフォーマットしてからURLリンクで共有。相手が開くとすぐに同じフォーマット結果が表示されます

使い方

  1. データベース方言を選択し(デフォルトはMySQL、20種類のSQL方言をサポート)、フォーマッターが構文を正しく認識することを確認
  2. フォーマットするSQL文を左側の編集エリアに貼り付けるか、アップロードボタンをクリックして.sql/.txtファイルをインポートするか、サンプルメニューからサンプルSQLを読み込み
  3. フォーマットボタン(Shift+Cmd/Ctrl+F)をクリックするか、自動フォーマットを待ち(入力後800msで自動的にトリガー)、右側にフォーマット結果が即座に表示
  4. フォーマットを調整する必要がある場合は、設定ボタンをクリックして設定パネルを展開し、キーワードの大文字小文字、インデント、改行などのオプションを調整するか、プリセットスタイルを選択。1行に圧縮する場合は圧縮ボタンをクリック
  5. コピーボタンをクリックして結果をコピーするか、ダウンロードボタンをクリックして.sqlファイルとして保存するか、共有ボタンをクリックしてSQLコンテンツを含むURLリンクを生成

特徴

  • 20種類のデータベース方言対応:Standard SQL、MySQL、MariaDB、TiDB、PostgreSQL、SQLite、BigQuery、Snowflake、Redshift、DB2、PL/SQL(Oracle)、T-SQL(SQL Server)、Spark SQL、Hive、Trino、ClickHouse、DuckDBなど20種類のSQL方言の構文認識とフォーマットをサポート
  • キーワード大文字小文字制御:SELECT/FROM/WHERE/JOINなどのキーワードを大文字(UPPER)、小文字(lower)、または元の大文字小文字を保持(preserve)の3モードから選択可能。データ型と関数名は個別に設定可能
  • 識別子大文字小文字制御:テーブル名、カラム名、エイリアスなどの識別子は大文字、小文字、または元の大文字小文字を保持に対応し、チームのコーディング規約に適応
  • インデントスタイル選択可能:標準インデント、表形式左揃え(tabularLeft)、表形式右揃え(tabularRight)の3種類のインデントスタイルをサポートし、異なる読みやすさの好みに対応
  • 柔軟なインデント設定:インデント幅は2スペース、4スペース、またはTab文字から選択可能。クエリ文間の空行数は0/1/2行から選択可能
  • 論理演算子の改行:AND/ORなどの論理演算子の改行位置を演算子の前(before)または後(after)に設定可能で、チームのコードスタイルに一致
  • 式の幅制御:式の改行幅のしきい値を調整可能(20〜200文字)。幅を超えると自動的に改行され、1行のコードの長さを制御
  • 密集演算子モード:有効にすると演算子の周囲に余分なスペースを入れず、よりコンパクトなフォーマット結果を生成。埋め込みSQLシナリオに適しています
  • セミコロン前の改行:文の終わりのセミコロンの前に改行を入れるかどうかを選択可能。セミコロンを独立した行に配置することで、文の境界をすばやく特定可能
  • 4種類のプリセットスタイル:デフォルト(UPPERキーワード+2スペースインデント)、小文字(すべて小文字キーワード)、コンパクト(表形式揃え+密集演算子)、ゆったり(4スペースインデント+2行空き)のプリセットをワンクリックで切り替え可能。項目ごとに調整する必要なし
  • SQL圧縮機能:ワンクリックでSQLを1行に圧縮し、コメント、余分な空白、改行を自動的に削除。ログ出力、コード連結、ドキュメント埋め込みシナリオに適しています
  • 構文検証機能:基本的なSQL構文検証。フォーマットに失敗した場合にエラーメッセージを表示し、構文の問題の特定を支援
  • サンプルSQL内蔵:基本クエリ、複雑なJOINクエリ、複数文バッチ処理、CREATE TABLEによるテーブル作成文の4セットのサンプルSQLを提供し、すぐにフォーマット効果を体験可能
  • ファイルアップロード/ダウンロード:.sql/.txtファイルをアップロードしてSQLを直接インポート可能。フォーマット後に.sqlファイルとしてダウンロードして保存可能
  • URL共有:LZ-String圧縮を使用してSQLをURLハッシュにエンコード。リンクをコピーするだけでフォーマット設定とSQLコンテンツを共有可能
  • リアルタイム自動フォーマット:SQL入力後800msのデバウンスで自動フォーマット。変更するとすぐに効果を確認でき、ボタンを繰り返しクリックする必要なし
  • キーボードショートカット:Shift+Cmd/Ctrl+Fでフォーマット、Shift+Cmd/Ctrl+Cで圧縮、Shift+Cmd/Ctrl+Vで検証、Shift+Cmd/Ctrl+Oでアップロード、Shift+Cmd/Ctrl+Dでダウンロード、Shift+Cmd/Ctrl+Kでクリア
  • CodeMirrorエディター:CodeMirror 6ベースのSQL構文ハイライトエディター。左右パネル幅のドラッグ調整、フォントサイズ調整、履歴パネルをサポート
  • ワンクリックで結果をコピー:フォーマットまたは圧縮後のSQLをワンクリックでクリップボードにコピーし、データベースクライアントやコードに直接貼り付けて使用可能
  • 純粋なブラウザローカル処理:すべてのSQLフォーマットはブラウザのJavaScriptでsql-formatterライブラリに基づいて完了。SQL文は外部サーバーにアップロードされず、データセキュリティが確保されます

よくある質問

SQLフォーマットはクエリロジックを変更しますか?フォーマット後のSQLは直接実行できますか?

クエリロジックは変更されません。SQLフォーマットは空白文字(改行、インデント、スペース)とキーワードの大文字小文字のみを調整し、SQL内の識別子、値、演算子、関数呼び出し、クエリ構造は変更しません。フォーマット後のSQLは元のSQLと意味的に完全に等価であり、MySQL Workbench、pgAdmin、DBeaver、Navicatなどのデータベースクライアントに直接コピーして実行できます。ただし、本番環境で実行する前にテスト環境で検証することを推奨します。

どのデータベース方言に対応していますか?データベースごとにSQL構文が異なる場合はどうすればよいですか?

20種類のSQL方言に対応しています:Standard SQL、MySQL、MariaDB、TiDB、PostgreSQL、SQLite、BigQuery、Snowflake、Redshift、DB2、DB2i、PL/SQL(Oracle)、T-SQL(SQL Server)、Spark SQL、Hive、Trino、ClickHouse、SingleStoreDB、DuckDB、N1QL(Couchbase)。データベースごとにページネーション構文(LIMIT vs LIMIT/OFFSET vs TOP vs ROWNUM)、文字列連結、日付関数、識別子の引用(バッククォート vs 二重引用符 vs 角括弧)などに違いがあります。正しい方言を選択することで、フォーマッターがキーワードと関数名を正しく認識し、方言固有の関数が誤ってフォーマットされるのを回避できます。

SQL圧縮とは何ですか?フォーマットとの違いは何ですか?

SQL圧縮(Minify)はフォーマットの逆の操作です:すべてのコメント(/* */の複数行コメントと--の単一行コメントを含む)を削除し、連続する空白文字を単一のスペースにマージし、括弧/カンマ/セミコロン/演算子の周囲の余分なスペースを削除して、1行のコンパクトなSQLを出力します。圧縮は以下のシナリオに適しています:SQLをコード文字列に埋め込む、ログファイルに書き込む、URLパラメータで渡す、改行の乱れを避けるためにチャットウィンドウで共有する。フォーマットは適切な改行とインデントを追加して可読性を向上させます。

自動フォーマットはいつトリガーされますか?オフにできますか?

左側の編集エリアでSQLを入力または変更すると、800msのデバウンス遅延後に自動的にフォーマットがトリガーされます(前回のフォーマットに構文エラーがなかった場合)。これは入力を停止した後にすぐにフォーマット結果を表示するためです。手動で制御したい場合は、ツールバーのフォーマットボタンをクリックするだけで、自動トリガーを待つ必要はありません。現在、自動フォーマットを個別にオフにするスイッチはありませんが、入力コンテンツを変更しない限り繰り返しトリガーされることはありません。

フォーマットに失敗して構文エラーが表示された場合はどうすればよいですか?

フォーマッターは解析できないSQL構文に遭遇するとエラーを報告します。一般的な原因には以下が含まれます:1)括弧の不一致——左右の括弧の数が一致しているか確認してください;2)文字列が閉じていない——単一引用符/二重引用符がペアになっているか確認してください。文字列内の引用符はエスケープする必要があります(''や\'など);3)データベース方言の選択ミス——PostgreSQL固有の::型変換構文を使用しているのにMySQL方言を選択している場合など;4)不完全なSQLフラグメント——SELECT FROMがなくWHERE条件だけがある場合など。エラーメッセージにはパーサーが報告した問題の位置と原因が表示されるので、それに基づいて問題を特定できます。検証ボタン(Shift+Cmd/Ctrl+V)をクリックして構文を先に確認することもできます。

キーワードの大文字、小文字、元の大文字小文字を保持の3モードはどのように選べばよいですか?

キーワード大文字(UPPER)は最も伝統的で一般的なSQLコーディングスタイルで、SELECT/FROM/WHERE/JOINなどのキーワードを大文字にすることでテーブル名/カラム名と視覚的に区別し、大量のコードの中からSQL構造をすばやく特定できます。キーワード小文字は最新のIDE環境(最新のエディターには構文ハイライトがあり、大文字小文字による区別に依存しなくなった)により適しており、視覚的により統一されています。元の大文字小文字を保持(preserve)は入力した大文字小文字を変更せず、既存のコードに最小限のフォーマット調整を行う場合に適しています。キーワード、識別子(テーブル名・カラム名)、データ型(VARCHAR/INT/BIGINT)、関数名(COUNT/SUM/COALESCE)の大文字小文字戦略はそれぞれ独立して設定できます。

Tabular揃えモードと標準インデントの違いは何ですか?

標準インデント(standard)は伝統的な階層インデント方式を使用し、各句に固定数のスペースでインデントします。Tabular左揃え/右揃えモードはSELECTリストのカラム名、WHERE条件の式などを列ごとに揃え、表のような視覚効果を作成します。例えば、SELECTの後の複数のカラム名は垂直に揃えられ、ASエイリアスも同じ列位置に揃えられます。このモードはワイドスクリーンモニターで複数カラムのクエリを読む際に非常に直感的ですが、狭い画面では行が長くなりすぎる可能性があります。

チームで統一されたSQLスタイルと個人の好みの間をすばやく切り替えるにはどうすればよいですか?

設定パネルのプリセットボタンを使用してください:デフォルト(UPPERキーワード+2スペース標準インデント)、小文字(すべて小文字キーワード)、コンパクト(tabularLeft揃え+密集演算子)、ゆったり(4スペースインデント+クエリ間2行空き)。チームに特定の規約がある場合は、各オプションを手動で調整してフォーマットしてください。現在、カスタムプリセットの保存はサポートされていませんが、設定オプションの数は限られているため、すばやく調整するのに便利です。

フォーマット後のSQLからコメントは失われますか?

フォーマット(Format)操作はコメントを保持します。--単一行コメントと/* */複数行コメントの両方が元の位置付近に保持されます(具体的な位置はsql-formatterライブラリのコメント処理ロジックに依存します)。ただし、圧縮(Compress)操作は最もコンパクトな1行SQLを生成するためにすべてのコメントを削除します。圧縮前にコメントを保持する必要がある場合は、先にフォーマット結果をコピーしてください。

どのキーボードショートカットに対応していますか?MacとWindows/Linuxの違いは何ですか?

以下のキーボードショートカットに対応しています(MacではCmdキー、Windows/LinuxではCtrlキーを使用し、いずれもShiftを同時に押す必要があります):Shift+Cmd/Ctrl+F フォーマット;Shift+Cmd/Ctrl+C 圧縮;Shift+Cmd/Ctrl+V 構文検証;Shift+Cmd/Ctrl+O ファイルアップロード;Shift+Cmd/Ctrl+D ファイルダウンロード;Shift+Cmd/Ctrl+K コンテンツクリア。ツールバーの疑問符アイコンをクリックすると、いつでもショートカット一覧を表示できます。

SQLファイルのアップロードにサイズ制限はありますか?どのファイル形式に対応していますか?

.sqlおよび.txt形式のテキストファイルのアップロードに対応しています。ファイルサイズに理論上のハードリミットはありませんが、非常に大きなファイル(1MBを超えるSQLダンプファイルなど)をブラウザで処理するとパフォーマンスの問題が発生する可能性があります。単一のクエリまたは小規模なスクリプトファイルの処理を推奨します。非常に大きなSQLファイル(完全なデータベースダンプなど)の場合は、小さなセグメントに分割してからフォーマットすることを推奨します。ファイルコンテンツはブラウザのFileReader APIを介して読み取られ、サーバーにアップロードされることはありません。

URL共有機能は安全ですか?サーバーがSQLコンテンツを見ることはありますか?

URL共有機能はLZ-String圧縮を使用してSQLコンテンツをURLのハッシュ部分(#の後のコンテンツ)にエンコードします。URLハッシュ部分の特性は、HTTPリクエストと共にサーバーに送信されることはなく、ブラウザローカルでのみ処理されることです。共有リンクを他の人にコピーすると、相手のブラウザがハッシュを解析してSQLコンテンツを解凍して表示します。このプロセス全体でSQLがサーバーを経由することはありません。ただし、共有リンクには完全なSQLコンテンツが含まれることに注意してください。SQLに機密情報(パスワード、キー、個人データなど)が含まれている場合は、公開チャネルでリンクを共有しないでください。

複数のSQL文を含むスクリプトをフォーマットできますか?

はい。複数のSQL文の一括フォーマットをサポートしています(セミコロンで区切られた複数のSELECT/INSERT/UPDATE/CREATE TABLE文など)。設定パネルの「クエリ間の空行数」オプションで文間の間隔(0/1/2行)を制御できます。「複数文」サンプルSQLを読み込むと、複数文のフォーマット効果を体験できます。各文は独立してインデントされて整形され、設定された空行数で文同士が区切られます。

どのくらいのサイズのSQL文を処理するとカクつきますか?

sql-formatterライブラリに基づく純粋なJavaScript実装により、数百行以内のSQLの処理は最新のブラウザで通常ミリ秒単位で応答し、カクつきを感じることはありません。数千行のストアドプロシージャや複雑なクエリでも1秒以内に完了します。すべての計算はブラウザのメインスレッドで完了するため、非常に大きなファイル(10000行を超えるSQLダンプなど)はインターフェースが一時的にフリーズする可能性があり、バッチ処理を推奨します。

このツールはインターネット接続が必要ですか?SQLデータは安全ですか?

ページが読み込まれた後はオフラインで使用できます。SQLフォーマット、圧縮、検証はすべてブラウザローカルのJavaScriptで完了し、入力したSQL文が外部サーバーに送信されることはありません。Cookieトラッキングを使用せず、ユーザーが入力したSQLコンテンツを収集しません。成熟したオープンソースのsql-formatterライブラリに基づいて実装されており、コードロジックは透明で監査可能です。

トラブルシューティング

フォーマットエラー「Parse error」または「SQLフォーマットに失敗しました」が表示された場合はどうすればよいですか?

フォーマッターはsql-formatterライブラリに基づいてSQL解析を行い、認識できない構文に遭遇するとエラーを報告します。一般的な原因と解決方法:1)括弧の不一致——左右の括弧の数が一致しているか確認してください。エディターの括弧一致ハイライト機能を使用して確認を補助できます;2)文字列の引用符が閉じていない——単一引用符、二重引用符がペアになっているか確認してください。文字列内の引用符はエスケープする必要があります(''や\'など);3)データベース方言の選択ミス——PostgreSQLの::演算子を使用しているのにMySQL方言を選択している場合など、正しい方言に切り替えてください;4)SQL文が不完全——WHERE句だけでSELECT FROMがない場合など;5)非常に特殊なデータベース固有の構文を使用している(特定のストアドプロシージャ制御フローなど)——最も近い方言に切り替えてみるか、フォーマット前にSQLフラグメントを簡略化してみてください。

フォーマット後に中国語や特殊文字が文字化けするのはなぜですか?

このツールはUTF-8エンコーディングを完全にサポートしており、中国語とUnicode文字はフォーマットプロセス中に変更されません。文字化けが発生する場合、通常は貼り付けたSQL自体がエンコーディングが正しくないファイル(GBKエンコーディングのファイルからコピーした場合など)に由来します。ソースファイルがUTF-8エンコーディングで保存されていることを確認するか、貼り付け前にファイルをUTF-8エンコーディングに変換してください。ブラウザ側のCodeMirrorエディターはデフォルトでUTF-8を使用しており、エンコーディング変換は導入されません。

SQLファイルをアップロードした後に反応がない、または空と表示されるのはなぜですか?

ファイルアップロードは.sqlおよび.txt拡張子のテキストファイルのみをサポートしています。ファイルがバイナリ形式(.sqliteデータベースファイル、.docドキュメントなど)の場合、アップロード後に文字化けまたは空で表示されます。また、一部のブラウザにはJavaScriptによるローカルファイルの読み取りにセキュリティ上の制限があります——ユーザーがアップロードボタンをクリックしてファイルを選択するのではなく、ドラッグアンドドロップでファイルを選択していないことを確認してください(ドラッグアンドドロップアップロードは現在サポートされていません)。ファイルサイズは1MBを超えないことを推奨します。超えるとブラウザの解析が遅くなる可能性があります。

フォーマット後に一部のキーワードが小文字/大文字になり、元の入力と一致しないのはなぜですか?

これはフォーマットの通常の動作です。キーワード大文字小文字(keywordCase)オプションはデフォルトでUPPERに設定されており、SQLキーワードを一様に大文字に変換します。元の大文字小文字を保持したい場合は、設定パネルでキーワード、識別子、データ型、関数の大文字小文字オプションをすべて「元の大文字小文字を保持(preserve)」に設定してください。これにより、フォーマッターは改行とインデントのみを調整し、文字の大文字小文字を変更しなくなります。

用語集

SQL Dialect(SQL方言)
異なるデータベース管理システム(DBMS)によるStandard SQLの拡張とバリアント。例えばMySQLのLIMIT、PostgreSQLの::型キャスト、SQL ServerのTOP、OracleのROWNUMはすべて方言固有の構文です。フォーマット時に正しい方言を選択することで、構文が正しく解析されることを確認します。
Keyword Case(キーワードの大文字小文字)
SQL予約語(SELECT/FROM/WHERE/JOINなど)の大文字小文字戦略。大文字(UPPER)は伝統的なスタイル、小文字(lower)は最新の開発でますます人気が高まっており、元の大文字小文字を保持(preserve)は最小限の変更に使用されます。
Identifier(識別子)
SQL内のデータベースオブジェクト名。データベース名、テーブル名、カラム名、エイリアス、インデックス名、ビュー名、ストアドプロシージャ名などが含まれます。データベースごとに識別子を引用する方法が異なります:MySQLはバッククォート、PostgreSQLは二重引用符、SQL Serverは角括弧を使用します。
Indent Style(インデントスタイル)
SQLフォーマット時のインデント位置揃え方法を制御します。標準インデントは階層的な進行を使用します;tabularLeft/tabularRightはカラム名とエイリアスを表形式で揃え、ワイドスクリーンでの可読性は向上しますが行が長くなる可能性があります。
Logical Operator Newline(論理演算子の改行)
複数行条件でのAND/ORなどの論理演算子の改行位置。beforeは演算子が次の行の先頭にあることを意味し、afterは演算子が現在の行の末尾にあることを意味します。チームごとに好みが異なります。
Expression Width(式の幅)
改行をトリガーする1行あたりの文字数しきい値(20〜200文字)。この幅を超える式は折り返されます。コードエディターのprintWidth/ruler設定に似ています。
Dense Operators(密集演算子)
フォーマットオプションの1つ。有効にすると演算子(=、<、>、+、-など)の周囲に余分なスペースを入れず、`WHERE id=1 AND status='active'`のようになり、`WHERE id = 1 AND status = 'active'`ではなく、よりコンパクトな出力を生成します。
Lines Between Queries(クエリ間の空行数)
複数のSQL文間の空行数。0は連続配置、1は1行の空行での区切り(一般的)、2は2行の空行(ゆったりスタイル)を意味し、複数文スクリプトの可読性に影響します。
SQL Minify/Compress(SQL圧縮)
フォーマットされたSQLからすべてのコメントと余分な空白を削除し、1行のコンパクト形式にマージします。ログ出力、コード埋め込み、URL受け渡しなどのシナリオに適しており、フォーマットの逆の操作です。
Pretty Print(整形表示)
自動インデントと改行により、コードやデータを可読性の高い形式で出力すること。SQL Pretty PrintはSQLフォーマット美化であり、Minify(圧縮)の反対です。
CodeMirror
このツールで使用しているブラウザ側コードエディターコンポーネント(バージョン6)。SQL構文ハイライト、行番号表示、コード折りたたみなどの編集強化機能を提供し、業界で広く使用されているWebコードエディターソリューションです。
sql-formatter
このツールの基盤で使用されているオープンソースSQLフォーマットライブラリ。複数のSQL方言の字句解析とフォーマット出力をサポートし、フロントエンドエコシステムで最も人気のあるSQLフォーマットライブラリの1つです。

対応SQL方言一覧

このツールは20種類のSQLデータベース方言に対応しています。使用しているデータベースに一致する方言を選択すると、最適なフォーマット結果が得られます:

方言データベース特徴の説明
Standard SQL標準SQLANSI SQL標準構文。汎用シナリオと不明な方言に適しています
MySQLMySQL / TiDB最も人気のあるオープンソースリレーショナルデータベース。バッククォート識別子、LIMITページネーション
MariaDBMariaDBMySQLのフォーク。MySQL構文と互換性があり、より多くの関数を拡張
PostgreSQLPostgreSQL機能豊富なオープンソースデータベース。二重引用符識別子、::型キャスト
SQLiteSQLite組み込み軽量データベース。モバイルアプリケーションとブラウザで一般的
T-SQLSQL Server / AzureマイクロソフトSQL ServerのTransact-SQL。角括弧識別子、TOPページネーション
PL/SQLOracleOracleの手続き型SQL拡張。ROWNUMページネーション、豊富な組み込みパッケージ
BigQueryGoogle BigQueryGoogleクラウドデータウェアハウス。STRUCT/ARRAYなどのネストされた型をサポート
SnowflakeSnowflakeクラウドネイティブデータウェアハウス。半構造化データ処理能力が強力
RedshiftAWS Redshiftアマゾンウェブサービスのデータウェアハウス。PostgreSQLベースだが独自の構文あり

フォーマットプリセットスタイル比較

4種類のワンクリックプリセットスタイルは異なる使用シナリオに適しています:

プリセットキーワードインデント演算子クエリ間隔
デフォルトUPPER2スペース 標準通常の間隔1空行
小文字lower2スペース 標準通常の間隔1空行
コンパクトUPPERTabular左揃え密集モード1空行
ゆったりUPPER4スペース 標準通常の間隔2空行

キーボードショートカット一覧

すべてのショートカットは修飾キー+Shift+対応する文字キーを同時に押す必要があります:

操作MacWindows/Linux説明
フォーマット⇧⌘FShift+Ctrl+FSQL文を美化し、改行とインデントを追加
圧縮⇧⌘CShift+Ctrl+CSQLを1行に圧縮し、コメントと空白を削除
検証⇧⌘VShift+Ctrl+VSQL構文が正しいかチェック
アップロード⇧⌘OShift+Ctrl+Oローカルファイルから.sql/.txtを読み込み
ダウンロード⇧⌘DShift+Ctrl+D結果を.sqlファイルとして保存
クリア⇧⌘KShift+Ctrl+K入力と出力のコンテンツを消去

Privacy & Security

このSQLフォーマッターのすべての操作は完全にあなたのブラウザローカルで完了します:あなたが入力したSQL文、選択した方言、フォーマット設定はすべてブラウザのJavaScriptでsql-formatterライブラリを介して処理され、ネットワークを介してSQLコンテンツや設定が外部サーバーに送信されることはありません。ファイルアップロードはHTML5 FileReader APIを介してローカルファイルコンテンツを読み取り、ネットワーク送信は行われません。URL共有機能は圧縮されたSQLをURLハッシュ部分にエンコードし(#の後のコンテンツはHTTPリクエストと共にサーバーに送信されません)、ブラウザローカルでのみ解凍して表示されます。Cookieトラッキングを使用せず、ユーザーが入力したSQLコンテンツや使用行動データを収集しません。ページを閉じるか更新すると、入力コンテンツと設定状態は自動的にリセットされます(履歴記録はローカルのlocalStorageにのみ保存されます)。

Authoritative References