SQL formatieren und Abfragen lesbar darstellen
Wandeln Sie eine kompakte oder uneinheitlich geschriebene SQL-Abfrage in eine gut lesbare Fassung mit großgeschriebenen Schlüsselwörtern, vorhersehbaren Abständen und gegliederter Einrückung um.
Im Browser ausführen – kostenlos
Der Formatierer führt eine deterministische lexikalische Analyse aus. Dadurch bleiben Zeichenketten und Bezeichner in Anführungszeichen erhalten, während Klauseln und verschachtelte Ausdrücke leichter zu prüfen sind. Vor der Ausgabe wird außerdem die Struktur kontrolliert: nicht ausgeglichene Klammern, unvollständige Zeichenketten und nicht geschlossene Bezeichner werden abgewiesen. Sie können das Werkzeug im Browser verwenden oder denselben Ablauf über die API für $0.002 pro Anfrage automatisieren.
Was der Formatierer ändert und beibehält
Der Formatierer schreibt erkannte SQL-Schlüsselwörter groß und setzt wichtige Klauseln wie SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT sowie gebräuchliche JOIN-Formen in übersichtliche Zeilen. Kommas trennen Listenelemente, während Klammern für verschachtelte Ausdrücke und Unterabfragen eine zusätzliche Einrückungsebene erzeugen. Operatoren erhalten einheitliche Abstände. Gleichzeitig gilt begrenzter Inhalt als geschützt. Texte in einfachen Anführungszeichen, Bezeichner in doppelten Anführungszeichen oder Graviszeichen sowie Bezeichner in eckigen Klammern behalten ihre ursprünglichen Zeichen und ihre Schreibweise. Zeilen- und Blockkommentare bleiben ebenfalls in der Ausgabe. So lässt sich die Abfrage leichter prüfen, ohne Annahmen über das Datenbankschema zu treffen. Die Formatierung ist bewusst deterministisch: Dieselbe Eingabe liefert stets dieselbe Ausgabe, ohne Netzwerkzugriff, Modellinterpretation, Zufallsauswahl oder Umgebungsabhängigkeit. Das Ergebnis steht im Feld formatted_sql als Klartext bereit. Sie können es in einen Editor, eine Migration, einen Bericht oder eine Codeprüfung übernehmen.
Wie die Strukturprüfung das Ergebnis absichert
Eine ansprechende Darstellung hilft nicht, wenn sie eine unvollständige Abfrage verdeckt. Deshalb erfolgt die Prüfung bereits während der Tokenisierung und nicht erst nach dem Layout. Zu jeder öffnenden Klammer muss eine passende schließende Klammer gehören; eine Schließung darf nicht vor der zugehörigen Öffnung stehen. Zeichenketten in einfachen Anführungszeichen sowie Bezeichner in doppelten Anführungszeichen, Graviszeichen oder eckigen Klammern müssen korrekt enden. Doppelte Anführungszeichen innerhalb eines begrenzten Werts gelten als Maskierung. Dadurch kann beispielsweise ein Apostroph wie in SQL üblich durch zwei einfache Anführungszeichen dargestellt werden. Auch Maskierungen mit Rückstrich bleiben zusammen. Ein nicht abgeschlossener Blockkommentar wird zurückgewiesen, da sich der Rest nicht sicher formatieren lässt. Diese Kontrollen prüfen die Struktur, nicht die Semantik: Das Werkzeug verbindet sich mit keiner Datenbank, kontrolliert keine Tabellen oder Spalten, wählt keinen Dialekt und entscheidet nicht über die Ausführbarkeit. Auch eine ausgeglichene Abfrage kann anbieterspezifische Syntaxfehler enthalten. Die Fehlermeldung benennt daher nicht ausgeglichene Klammern oder Anführungszeichen als ungültige Eingabe, ohne eine vollständige SQL-Kompilierung zu behaupten.
Formatiertes SQL zuverlässig einsetzen
Fügen Sie die vollständige Abfrage in das Feld query ein und senden Sie sie als Zeichenkette. Vergleichen Sie bei interaktiver Nutzung die formatierte Fassung mit dem Original, bevor Sie produktiven Code ersetzen. Das gilt besonders bei herstellerspezifischen Operatoren oder ungewöhnlichen Regeln für Bezeichner. In automatisierten Abläufen können Sie den Formatierer verwenden, bevor erzeugte Migrationen gespeichert, SQL-Texte an Prüfvorgänge angehängt oder Änderungen an Abfragen verglichen werden. Eine einheitliche Darstellung reduziert unnötige Unterschiede: Prüfende können sich auf Verknüpfungen, Bedingungen, ausgewählte Spalten und Sortierungen konzentrieren statt auf Großschreibung und Leerzeichen. Da Kommentare und begrenzte Werte erhalten bleiben, eignet sich die Ausgabe für Dokumentation und Ausführung; sie ersetzt jedoch niemals Datenbankprüfung oder Tests. Das Browserwerkzeug nutzt dieselbe reine Funktion wie die API und hält beide Ergebnisse konsistent. Die API kostet $0.002 pro Anfrage. Die Eingabe wird ohne externe Dienste verarbeitet und muss nach der Antwort nicht gespeichert werden. Schlägt die Prüfung fehl, korrigieren Sie das nicht zugeordnete Begrenzungszeichen und senden Sie die vollständige Anweisung erneut.
Anwendungsfälle
Erzeugtes SQL übersichtlich machen
Wandeln Sie eine einzeilige Abfrage aus einem ORM, Protokoll oder Berichtswerkzeug in eine besser prüfbare Darstellung um.
Migrationsprüfungen vereinheitlichen
Wenden Sie vor der Prüfung eine vorhersehbare Großschreibung und Einrückung an, damit reine Formatunterschiede abnehmen.
Unvollständig kopierte Abfragen erkennen
Weisen Sie SQL mit einer fehlenden Klammer oder einem fehlenden Anführungszeichen vor Veröffentlichung oder Weitergabe zurück.
Häufige Fragen
Führt der Formatierer mein SQL aus?
Nein. Er nimmt nur eine lokale lexikalische Formatierung und Strukturkontrollen vor. Er stellt keine Datenbankverbindung her und liest kein Schema.
Welche Groß- und Kleinschreibung wird verwendet?
Erkannte SQL-Schlüsselwörter werden großgeschrieben. Begrenzte Texte und Bezeichner behalten ihre ursprüngliche Schreibweise.
Welche Elemente werden geprüft?
Nicht zugeordnete Klammern, offene einfache oder doppelte Anführungszeichen, unvollständige Bezeichner in Graviszeichen oder eckigen Klammern und offene Blockkommentare werden abgewiesen.
Unterstützt das Werkzeug jeden SQL-Dialekt?
Es formatiert verbreitete SQL-Syntax ohne Dialektauswahl. Herstellerspezifische Konstrukte bleiben erhalten, ihre Bedeutung wird jedoch nicht bestätigt.
Was kostet die API?
Die API kostet $0.002 pro Anfrage. Die Browserfassung führt dieselbe deterministische Formatierungslogik aus.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/web/sql-format \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"select u.id,u.name,count(o.id) as orders from users u left join orders o on o.user_id=u.id where u.active=true group by u.id,u.name order by orders desc;"}'const res = await fetch("https://api.kit.forhosting.com/web/sql-format", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"query": "select u.id,u.name,count(o.id) as orders from users u left join orders o on o.user_id=u.id where u.active=true group by u.id,u.name order by orders desc;"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/sql-format",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"query": "select u.id,u.name,count(o.id) as orders from users u left join orders o on o.user_id=u.id where u.active=true group by u.id,u.name order by orders desc;"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/sql-format", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"query":"select u.id,u.name,count(o.id) as orders from users u left join orders o on o.user_id=u.id where u.active=true group by u.id,u.name order by orders desc;"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"query":"select u.id,u.name,count(o.id) as orders from users u left join orders o on o.user_id=u.id where u.active=true group by u.id,u.name order by orders desc;"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/sql-format", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"query": "select u.id,u.name,count(o.id) as orders from users u left join orders o on o.user_id=u.id where u.active=true group by u.id,u.name order by orders desc;"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.sql_format",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
timeout_sec | 30 |
max_crawl_pages | 25 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |