SQL-Formatter/ MySQL · PostgreSQL

SQL-Abfragen sofort formatieren oder komprimieren. Unterstutzt MySQL, PostgreSQL und generisches SQL.

Modus:
Dialekt:
Einzug:
SQL Eingabe0 Zeichen
Formatiertes Ergebnis

Hat dieses Tool Ihr Problem gelöst?

Codebeispiele

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))
}

Haufig gestellte Fragen

Was ist SQL-Formatierung / Verschonerung?

SQL-Formatierung (Verschonerung) wandelt eine kompakte oder inkonsistent geschriebene SQL-Abfrage in eine lesbare, konsistent eingeruckte Form um. Sie fugt Zeilenumbruche vor Hauptklauseln (SELECT, FROM, WHERE, JOIN usw.) ein und wandelt Schlusselworter in Grossbuchstaben um. Dies andert nicht, was die Abfrage tut — nur wie sie aussieht.

Unterstutzt es MySQL- und PostgreSQL-Syntax?

Der Formatter verarbeitet gangige SQL-Syntax, die von MySQL, PostgreSQL und den meisten anderen RDBMS geteilt wird. Dialektspezifische Funktionen wie der ::-Cast-Operator von PostgreSQL oder die Backtick-Bezeichner von MySQL werden korrekt tokenisiert. Wahlen Sie Ihren Dialekt, um anzuzeigen, welche Syntaxkonventionen Sie verwenden.

Wofur wird SQL-Minifizierung verwendet?

Minifizierung entfernt alle uberflussigen Leerzeichen und Kommentare, um die kompakteste Form einer Abfrage zu erzeugen. Dies ist nutzlich beim Einbetten von SQL in Code-Strings, beim Senden von SQL in Logs oder zur Reduzierung der Ausfuhrlichkeit von Abfrageprotokollen. Minifizierte Abfragen sind funktional identisch mit ihren formatierten Versionen.

Wie formatiere ich SQL-Abfragen uber die Befehlszeile?

Fur PostgreSQL verwenden Sie pg_format (Perl). Fur MySQL verwenden Sie das Python-Paket mysqlformat. Sie konnen auch sqlparse in Python verwenden: import sqlparse; sqlparse.format(sql, reindent=True, keyword_case='upper'). Siehe Codebeispiele unten.

Warum werden meine Kommentare nach der Minifizierung entfernt?

Die Minifizierung entfernt absichtlich SQL-Kommentare (-- einzeilige und /* Block-*/-Kommentare), um die Grosse zu reduzieren. Wenn Sie Kommentare beibehalten mussen, verwenden Sie stattdessen den Formatierungsmodus, der alle Kommentare beibehalt und sie auf der richtigen Einruckungsebene neu formatiert.

Kann der Formatter CTEs (WITH-Klauseln) verarbeiten?

Ja. WITH ... AS (...) Common Table Expressions werden erkannt. Das WITH-Schlusselwort startet einen neuen Block. Verschachtelte SELECT-Anweisungen innerhalb von CTEs werden ebenfalls entsprechend eingeruckt.