SQL フォーマッター/ MySQL · PostgreSQL

SQL クエリを即座に整形または圧縮。MySQL、PostgreSQL、汎用 SQL に対応。

モード:
方言:
インデント:
SQL 入力0 文字
フォーマット結果

このツールは役に立ちましたか?

コード例

Python (sqlparse)

import sqlparse

sql = "select id,name from users where active=1"

# Format / beautify
formatted = sqlparse.format(
    sql,
    reindent=True,
    keyword_case='upper',
    identifier_case='lower',
    strip_comments=False,
    indent_width=2,
)
print(formatted)
# SELECT id, name
# FROM users
# WHERE active = 1

# Minify
minified = sqlparse.format(
    sql,
    strip_whitespace=True,
    keyword_case='upper',
)

Node.js (sql-formatter)

import { format } from 'sql-formatter';

const sql = `select id,name,email
from users where status='active'`;

// Format for MySQL
const formatted = format(sql, {
  language: 'mysql',
  tabWidth: 2,
  keywordCase: 'upper',
  linesBetweenQueries: 2,
});

// Format for PostgreSQL
const pgFormatted = format(sql, {
  language: 'postgresql',
  tabWidth: 2,
  keywordCase: 'upper',
});

console.log(formatted);
// SELECT
//   id,
//   name,
//   email
// FROM users
// WHERE status = 'active'

CLI (pgFormatter)

# Install pgFormatter (Perl)
# https://github.com/darold/pgFormatter
cpanm pgFormatter

# Format a file
pg_format query.sql -o formatted.sql

# Format from stdin
echo "select * from users" | pg_format

# Options
pg_format query.sql   --spaces 2   --keyword-case 1   --function-case 2

# Using prettier-plugin-sql (Node)
npx prettier --plugin prettier-plugin-sql   --parser sql query.sql

Go

package main

import (
    "fmt"
    "strings"
    "unicode"
)

// Simple SQL keyword uppercaser
func formatSQL(sql string) string {
    keywords := []string{
        "SELECT", "FROM", "WHERE",
        "JOIN", "LEFT JOIN", "INNER JOIN",
        "GROUP BY", "ORDER BY", "HAVING",
        "INSERT INTO", "VALUES", "UPDATE",
        "SET", "DELETE FROM", "LIMIT",
    }
    result := sql
    for _, kw := range keywords {
        lower := strings.ToLower(kw)
        result = strings.ReplaceAll(
            result, lower,
            "\n"+kw,
        )
    }
    return strings.TrimSpace(result)
}

// For production use, consider:
// github.com/xwb1989/sqlparser (MySQL)
// github.com/pganalyze/pg_query_go (PostgreSQL)
func main() {
    sql := "select id from users where id=1"
    fmt.Println(formatSQL(sql))
}

よくある質問

SQL フォーマット(整形)とは何ですか?

SQL フォーマット(整形)は、コンパクトまたは不統一に書かれた SQL クエリを、読みやすく一貫したインデントの形式に変換します。主要な句(SELECT、FROM、WHERE、JOIN など)の前に改行を追加し、キーワードを大文字にします。クエリの動作は変わらず、見た目だけが変わります。

MySQL と PostgreSQL の構文に対応していますか?

フォーマッターは MySQL、PostgreSQL、その他多くの RDBMS に共通する SQL 構文を処理します。PostgreSQL の :: キャスト演算子や MySQL のバッククォート識別子など、方言固有の機能も正しくトークン化されます。使用する構文規則を示すために方言を選択してください。

SQL の圧縮(ミニファイ)は何に使いますか?

圧縮は余分な空白とコメントをすべて削除し、最もコンパクトなクエリ形式を生成します。コード文字列に SQL を埋め込む場合、ログで SQL を送信する場合、クエリログの冗長性を削減する場合に便利です。圧縮されたクエリは整形版と機能的に同一です。

コマンドラインで SQL をフォーマットするには?

PostgreSQL には pg_format(Perl)を使用します。MySQL には Python の mysqlformat パッケージを使用します。Python の sqlparse も使用できます:import sqlparse; sqlparse.format(sql, reindent=True, keyword_case='upper')。下記のコード例を参照してください。

圧縮後にコメントが削除されるのはなぜですか?

圧縮モードはサイズを削減するために SQL コメント(-- 単一行コメントと /* ブロック */ コメント)を意図的に除去します。コメントを保持する必要がある場合は、代わりにフォーマットモードを使用してください。コメントは正しいインデントレベルで保持されます。

CTE(WITH 句)を処理できますか?

はい。WITH ... AS (...) 共通テーブル式が認識されます。WITH キーワードは新しいブロックを開始します。CTE 内のネストされた SELECT 文も適切にインデントされます。