Zum Inhalt springen

SQL-Formatierer

Setzt jede Klausel (SELECT, FROM, WHERE …) eingerückt auf eigene Zeilen. Dialekte: Standard-SQL, MySQL, PostgreSQL, SQLite, T-SQL, BigQuery. Prüft keine Syntax.

0 Zeichen · 0 Zeilen
Groß-/Kleinschreibung der Schlüsselwörter

Ausgabe0 Zeichen · 0 Zeilen

Deine Eingaben werden nur in diesem Browser verarbeitet und nie an einen Server gesendet. So funktioniert es

Eine einzeilige SQL-Abfrage wird mit Zeilenumbrüchen und Einrückung für SELECT und FROM formatiert

Dialekt wählen, Abfrage einfügen

Wähle zuerst unter „Dialekt“ die Datenbank, auf der die Abfrage laufen soll. Zur Auswahl stehen „Standard-SQL“, „MySQL“, „PostgreSQL“, „SQLite“, „T-SQL (SQL Server)“ und „BigQuery“. Dann kommt die Abfrage ins Feld „Eingabe“, und darunter stellst du drei Dinge ein.

  • Groß-/Kleinschreibung der Schlüsselwörter: „Großbuchstaben (SELECT)“, „Kleinbuchstaben (select)“ oder „Wie eingegeben“.
  • Einrückung: „2 Leerzeichen“, „4 Leerzeichen“ oder „Tabulator“.
  • Leerzeilen zwischen Abfragen: wie viele Leerzeilen zwischen Abfragen stehen, die durch ein Semikolon (;) getrennt sind. Möglich sind 0 bis 5, voreingestellt ist 1.

So sieht die folgende Zeile mit Standard-SQL, Großbuchstaben und 2 Leerzeichen aus:

select u.id, count(o.id) as orders from users u left join orders o on o.user_id = u.id where u.created_at >= '2026-01-01' group by u.id having count(o.id) > 3 order by orders desc
SELECT
  u.id,
  count(o.id) AS orders
FROM
  users u
  LEFT JOIN orders o ON o.user_id = u.id
WHERE
  u.created_at >= '2026-01-01'
GROUP BY
  u.id
HAVING
  count(o.id) > 3
ORDER BY
  orders DESC

Im Feld „Ausgabe“ erscheinen Schlüsselwörter fett, Strings und Zahlen farbig und Kommentare kursiv. Diese Hervorhebung schaut nur auf die Gestalt der Wörter. Eine Spalte, die wie ein reserviertes Wort heißt, etwa default oder index, wird deshalb fett wie ein Schlüsselwort dargestellt, solange sie nicht in Anführungszeichen steht. Ist das Ergebnis länger als 200.000 Zeichen, steht dort „Großes Ergebnis, daher ohne Hervorhebung angezeigt“, und du siehst nur den reinen Text. „Zeilen“ und „Größe“ unter dem Ergebnis beziehen sich auf das formatierte Ergebnis.

Fügst du mehrere Abfragen auf einmal ein, wird jede für sich formatiert, getrennt wird am Semikolon. Fehlt es bei der letzten Abfrage, wird im Ergebnis auch keines ergänzt.

Was die Groß-/Kleinschreibung der Schlüsselwörter erfasst

Die Einstellung „Groß-/Kleinschreibung der Schlüsselwörter“ gilt nur für reservierte Wörter wie select, from, as und join. Funktionsnamen und Datentypen, Tabellen- und Spaltennamen sowie der Inhalt von Strings bleiben so, wie du sie eingegeben hast.

  • Mit „Großbuchstaben (SELECT)“ werden in select count(*), cast(x as int) from t nur SELECT, AS und FROM großgeschrieben, count(*) und int bleiben klein.
  • Mit „Kleinbuchstaben (select)“ werden in SELECT Now() FROM t die Wörter select und from kleingeschrieben, Now() bleibt unverändert.
  • Was in where name = 'select from' zwischen den Anführungszeichen steht, ändert sich bei keiner Einstellung.

Verlangt die Konvention in deinem Team, dass auch COUNT und INT großgeschrieben werden, musst du das von Hand nachziehen.

Was passiert, wenn der Dialekt nicht passt

Anführungszeichen und Platzhalter schreibt jede Datenbank anders. Mit dem falschen Dialekt lässt sich deshalb auch eine Abfrage, die problemlos läuft, nicht parsen, und es erscheint ein Fehler. Die Tabelle zeigt, was mit derselben Eingabe in jedem der sechs Dialekte passiert ist.

Eingabe Fehler in diesen Dialekten Formatiert in diesen Dialekten
select [a] from [t] Standard-SQL, MySQL (Zeile 1, Spalte 8) PostgreSQL, SQLite, T-SQL, BigQuery
select `a` from `t` PostgreSQL, T-SQL (Zeile 1, Spalte 8) Standard-SQL, MySQL, SQLite, BigQuery
select a::int from t Standard-SQL, MySQL, SQLite, BigQuery (Zeile 1, Spalte 9) PostgreSQL, T-SQL
select * from t where a = $1 Standard-SQL, SQLite, T-SQL, BigQuery (Zeile 1, Spalte 27) MySQL, PostgreSQL

Auch ohne Fehler kann das Ergebnis leicht abweichen. Formatierst du select top 5 a from t mit „T-SQL (SQL Server)“, wird TOP großgeschrieben. In den anderen fünf Dialekten gilt top nicht als Schlüsselwort und bleibt klein. Umgekehrt bleibt limit 5 nur in T-SQL klein. Statt den Dialekt so lange zu wechseln, bis der Fehler verschwindet, wählst du besser gleich die Datenbank, die du tatsächlich verwendest.

Kein Fehler heißt nicht: korrektes SQL

Das Tool führt die Abfrage nicht aus und prüft auch die Syntax nicht zu Ende. Es zerlegt den Text in Wörter, sucht die Grenzen der Klauseln und richtet die Zeilen daran aus. Die meisten fehlerhaften Abfragen rutschen deshalb einfach durch.

  • selct * form users (Tippfehler) kommt ohne Fehler als eine einzige Zeile wieder heraus. Dass nichts in Klauseln aufgeteilt wurde, ist der einzige Hinweis.
  • select * from users where (Bedingung fehlt) wird so formatiert, dass es mit WHERE endet.

Als Fehler erkannt werden vor allem Klammern und Anführungszeichen ohne Gegenstück sowie Zeichen, die es im gewählten Dialekt nicht gibt. Dann erscheint eine Meldung wie „Dieses SQL lässt sich nicht parsen. Prüfe die Stelle bei Zeile 1, Spalte 24.“, dazu die betroffene Zeile und eine ^-Markierung.

Eingabe (Standard-SQL) Angezeigte Position Ursache
select * from (select 1 Zeile 1, Spalte 24 (Ende der Eingabe) Klammer nicht geschlossen
select * from users) Zeile 1, Spalte 20 schließende Klammer ohne öffnende
select 'abc Zeile 1, Spalte 8 Anführungszeichen nicht geschlossen

Bei einer nicht geschlossenen Klammer zeigt die Markierung auf das Ende der Eingabe. Such die öffnende Klammer ohne Gegenstück also nicht an der markierten Stelle, sondern davor.

Die Formatierungs-Engine wird erst bei der ersten Eingabe geladen

Das Formatieren übernimmt die quelloffene Bibliothek sql-formatter. Weil sie groß ist, wird sie nicht beim Öffnen der Seite geladen, sondern in dem Moment, in dem du zum ersten Mal eine Abfrage eingibst. So lange steht im Ergebnisfeld „Wird formatiert …“. Geladen wird nur der Code der Engine, deine Abfrage ist nicht Teil dieser Anfrage. Ist die Internetverbindung nach dem Öffnen der Seite abgerissen und du gibst dann zum ersten Mal etwas ein, erscheint „Die Formatierungs-Engine konnte nicht geladen werden. Prüfe deine Internetverbindung und lade die Seite neu.“

Eine Funktion, die alles auf eine Zeile staucht, gibt es nicht. Die Bibliothek kann nur in Zeilen umbrechen und ausrichten, und Leerraum auf eigene Faust zu löschen würde riskieren, auch Leerzeichen in Strings und Kommentaren zu erwischen. Deshalb fehlt sie. Willst du weniger Zeilen, bleibt dir nur, „Leerzeilen zwischen Abfragen“ auf 0 zu stellen.

Quellen

Häufige Fragen

Einen Teil meiner Abfrage habe ich von Hand ausgerichtet. Kann der so bleiben?

Ja. Setz den Abschnitt zwischen die Kommentare /* sql-formatter-disable */ und /* sql-formatter-enable */. Was dazwischen steht, wird nicht geparst und Zeichen für Zeichen ins Ergebnis übernommen. Formatiert wird nur die Abfrage davor und danach. Die beiden Kommentare bleiben im Ergebnis stehen.

Funktioniert das auch mit gespeicherten Prozeduren oder Skripten mit DELIMITER?

Nicht richtig. Die Formatierungs-Engine sql-formatter gibt selbst an, dass sie gespeicherte Prozeduren und das Umstellen des Abfragetrenners auf etwas anderes als das Semikolon nicht unterstützt. Gibst du im Dialekt MySQL eine Prozedur ein, die mit DELIMITER // beginnt, erscheint zwar ohne Fehler ein Ergebnis, aber aus // ist / / geworden, und die Zeilenumbrüche im Rumpf stimmen nicht mehr. Nimm bei solchen Skripten nur die SELECT- oder UPDATE-Anweisungen aus der Prozedur heraus und formatiere sie einzeln.

Was passiert mit Template-Platzhaltern wie {{ name }} in einer Abfrage, die ich aus dem Code kopiert habe?

In allen sechs Dialekten gibt es einen Fehler. Bei select * from t where a = {{ var }} zeigt Standard-SQL auf Zeile 1, Spalte 27, also auf die öffnende geschweifte Klammer. Ersetz den Template-Teil vorübergehend durch einen Wert (etwa die Zahl 1 oder 'x'), formatiere und setz ihn danach wieder ein. Platzhalter wie das Fragezeichen (?), $1 oder :name werden je nach Dialekt akzeptiert oder als Fehler gemeldet.

Verwendete Open-Source-Software: sql-formatter (MIT), nearley (MIT)

Zuletzt aktualisiert: