Notepad++ plugin
Einstellungen
Jede Einstellung des SQL Formatters, erklärt mit einem echten Vorher/Nachher-Beispiel — kein Rätselraten, was eine Checkbox bewirkt, bevor Sie sie aktivieren.
1. Dialekt
Wählen Sie ANSI, Snowflake, PostgreSQL, MS SQL, MySQL, SQLite oder Databricks. Der Formatter schreibt herstellerspezifische Funktionsnamen in das Äquivalent des Ziel-Dialekts um und wendet sofort eine idiomatische Schreibweise-Voreinstellung an (z. B. Snowflake = alles Großbuchstaben, PostgreSQL = alles Kleinbuchstaben).
Snowflake → MS SQL
NVL und LENGTH existieren nicht in T-SQL — der Formatter kennt die richtige Alternative pro Dialekt (ISNULL, LEN), nicht nur eine feste Übersetzung.
Vorher
SELECT NVL(discount, 0), LENGTH(customer_name) FROM orders
Nachher
SELECT ISNULL(discount, 0), LEN(customer_name) FROM orders
MS SQL → Snowflake
Und umgekehrt: IIF, ISNULL und GETDATE() erhalten ihr Snowflake-Äquivalent, inklusive der für diesen Dialekt üblichen Standard-Schreibweise.
Vorher
select iif(amount>1000,'large','small'), isnull(notes,'-'), getdate() from orders
Nachher
SELECT IFF(AMOUNT > 1000, 'LARGE', 'SMALL'), NVL(NOTES, '-'), CURRENT_TIMESTAMP FROM ORDERS
2. Schreibweise
Unabhängig einstellbar für Schlüsselwörter, Funktionsnamen und Identifikatoren (Tabellen- und Spaltennamen): Beibehalten, Kleinschreibung oder Großschreibung. So können Sie z. B. Schlüsselwörter in Großbuchstaben haben, ohne dass sich Ihre Spaltennamen mitändern.
Schlüsselwörter groß, Funktionen groß, Identifikatoren klein
Eine häufige Kombination: SQL-Schlüsselwörter und Funktionen heben sich in Großbuchstaben ab, Tabellen- und Spaltennamen bleiben durchgängig klein.
Vorher
select Count(Order_Id), Customer_Name from Orders where Status = 'active'
Nachher
SELECT COUNT(order_id), customer_name FROM orders WHERE status = 'active'
3. Spalten & Aliase
Setzen Sie jede SELECT-Spalte auf eine eigene Zeile, wählen Sie, ob das Komma vor oder nach dem Spaltennamen steht, und legen Sie fest, was mit AS-Aliasen passiert: hinzufügen, entfernen oder unverändert lassen — mit eigener Schreibweise für das Wort AS selbst.
Komma davor + AS hinzufügen (klein)
Der Standardstil dieses Plugins: jede Spalte auf eigener Zeile, Komma am Anfang (damit Sie es beim Scrollen sofort sehen), und ein impliziter Alias erhält sein AS zurück.
Vorher
SELECT order_id, SUM(amount) total, customer_name FROM orders
Nachher
select order_id
, sum(amount) as total
, customer_name
from ordersKomma danach + AS entfernen
Der klassische Stil: Komma am Zeilenende, und AS wird entfernt, sodass der Aliasname direkt nach dem Ausdruck steht.
Vorher
SELECT order_id, SUM(amount) AS total, customer_name FROM orders
Nachher
select order_id,
sum(amount) total,
customer_name
from orders4. Ausrichtung
Der charakteristische Look dieses Formatters: SELECT/FROM/WHERE rechtsbündig auf gleicher Breite (der klassische 'Treppen'-Stil), und ON/AND innerhalb eines JOINs unter dem Ende des JOIN-Schlüsselworts ausgerichtet.
Rechtsbündige Schlüsselwörter
select/from/where haben alle den gleichen rechten Rand, sodass die WHERE-Bedingungen direkt unter den Spaltennamen beginnen.
Vorher
SELECT order_id FROM orders WHERE status = 'active'
Nachher
select order_id from orders where status = 'active'
ON unter JOIN ausgerichtet
Bei mehreren AND-Bedingungen in einem JOIN reihen sie sich schön untereinander auf, statt lose am linken Rand zu kleben.
Vorher
SELECT * FROM orders o JOIN customers c ON c.customer_id = o.customer_id AND c.active = 1
Nachher
select *
from orders o
join customers c
on c.customer_id = o.customer_id
and c.active = 15. Struktur
Wie CASE-Anweisungen, CTEs (WITH-Klauseln), Subqueries und Semikolons aufgebaut werden: jedes WHEN in eigener Zeile oder kompakt, CTEs mit Leerzeile dazwischen, Subqueries, die relativ zu ihrem eigenen Elternelement einrücken, und Semikolons, die automatisch hinzugefügt oder entfernt werden können.
CASE: Expand vs. Inline
'Expand' setzt jedes WHEN in eine eigene Zeile (gut lesbar bei vielen Zweigen); 'Inline' hält alles in einer Zeile (kompakt für kurze CASE-Ausdrücke).
Vorher
SELECT CASE WHEN amount > 1000 THEN 'large' WHEN amount > 100 THEN 'medium' ELSE 'small' END AS size FROM orders
Nachher
select case
when amount > 1000 then 'large'
when amount > 100 then 'medium'
else 'small'
end as size
from ordersCTEs: jede in neuer Zeile + eingerückt
Bei mehreren CTEs in einer WITH-Klausel erhält jede CTE einen eigenen Block mit einer Leerzeile dazwischen, und der CTE-Rumpf wird unter dem Namen eingerückt.
Vorher
WITH a AS (SELECT 1), b AS (SELECT 2) SELECT * FROM a, b
Nachher
with a as (
select 1
)
, b as (
select 2
)
select *
from a
, bSemikolons automatisch hinzufügen
Praktisch für Skripte mit mehreren Anweisungen: Jede Anweisung ohne Semikolon erhält automatisch eines — in der letzten Zeile, in einer eigenen Zeile oder unverändert.
Vorher
SELECT 1 FROM t SELECT 2 FROM t
Nachher
select 1 from t; select 2 from t;
6. Abstände
Leerzeichen um Operatoren (a = b vs. a=b) und innerhalb von Funktionsklammern (count( * ) vs. count(*)), eine Leerzeile zwischen Klauseln, wie viele Leerzeilen zwischen Anweisungen erhalten bleiben, eine maximale Zeilenlänge und das automatische Umbrechen langer IN (...)-Listen.
Operatoren: Leerzeichen hinzufügen
a=b, a>b und a<>b erhalten alle Leerzeichen, ohne dass Sie für jeden Operator eine eigene Regel schreiben müssen.
Vorher
SELECT * FROM orders WHERE amount>=100 AND status<>'cancelled'
Nachher
select * from orders where amount >= 100 and status <> 'cancelled'
Lange IN (...)-Listen umbrechen
Legen Sie einen Zeichen-Schwellenwert fest; eine längere IN-Liste wird automatisch auf mehrere Zeilen umgebrochen statt einer unlesbaren langen Zeile.
Vorher
SELECT * FROM orders WHERE status IN ('active', 'pending', 'processing', 'shipped', 'delivered')Nachher
select *
from orders
where status in ( 'active', 'pending', 'processing'
, 'shipped', 'delivered' )7. JOINs
Ein Schalter: INNER und OUTER entfernen, sobald sie überflüssig sind. INNER JOIN wird zu JOIN, LEFT OUTER JOIN wird zu LEFT JOIN — kürzer und funktional identisch.
INNER/OUTER entfernen
Vorher
SELECT * FROM orders o INNER JOIN customers c ON c.id = o.customer_id LEFT OUTER JOIN shippers s ON s.id = o.shipper_id
Nachher
select *
from orders o
join customers c
on c.id = o.customer_id
left join shippers s
on s.id = o.shipper_id8. FQDN (vollqualifizierte Namen)
Geben Sie einen Datenbank- und/oder Schemanamen ein, und jeder Tabellenverweis in FROM/JOIN erhält automatisch dieses Präfix — praktisch, wenn Sie mit mehreren Datenbanken/Schemas arbeiten und überall explizit sein möchten.
Datenbank + Schema hinzufügen
Datenbank = 'analytics', Schema = 'public' — jeder unqualifizierten Tabelle wird 'analytics.public.' vorangestellt, Aliase bleiben unberührt.
Vorher
SELECT o.order_id FROM orders o JOIN customers c ON c.id = o.customer_id
Nachher
select o.order_id
from analytics.public.orders o
join analytics.public.customers c
on c.id = o.customer_id9. Profile
Speichern Sie die komplette Kombination aller obigen Einstellungen unter einem Namen ('Team-Stil', 'Kunde-X', ...) und wechseln Sie mit einem Klick dazwischen. Exportieren Sie als JSON, um es mit Kollegen zu teilen, oder importieren Sie das Profil eines Teamkollegen.
Extra: außerhalb des Einstellungsdialogs
Drei Funktionen, die Sie direkt über das Menü verwenden, ohne vorher etwas einstellen zu müssen.
Convert Quotes
Wechseln Sie zwischen einfachen, doppelten und Backtick-Anführungszeichen für Strings und Identifikatoren — praktisch beim Umstieg von MySQL auf PostgreSQL.
Vorher
SELECT `customer_name` FROM `orders` WHERE `status` = "active"
Nachher
SELECT 'customer_name' FROM 'orders' WHERE 'status' = 'active'
Zahlenformat konvertieren
Konvertieren Sie niederländische Notation (1.234,56) in englische (1,234.56) oder umgekehrt — vermeidet Fehler beim Abtippen von Berichtszahlen.
Vorher
SELECT * FROM orders WHERE amount > 1.234,56
Nachher
SELECT * FROM orders WHERE amount > 1,234.56
dbt / Jinja & No-Format-Pragma
{{ ref(...) }}, {{ var }} und {# comment #} werden erkannt und nie aufgeteilt oder umgeschrieben. Soll ein Block komplett unangetastet bleiben, umschließen Sie ihn mit -- @formatter:off / -- @formatter:on.
Vorher
select {{ ref('orders') }}.order_id
-- @formatter:off
from weird_legacy_table x
-- @formatter:onNachher
select {{ ref('orders') }}.order_id
-- @formatter:off
from weird_legacy_table x
-- @formatter:on