SQL Formatter

Notepad++ plugin

Instellingen

Elke instelling van de SQL Formatter, uitgelegd met een echt voor/na-voorbeeld — geen giswerk over wat een knopje doet voordat je 'm aanzet.

1. Dialect

Kies ANSI, Snowflake, PostgreSQL, MS SQL, MySQL, SQLite of Databricks. De formatter herschrijft vendor-specifieke functienamen naar het equivalent van het doel-dialect en past meteen een idiomatische casing-preset toe (bijv. Snowflake = alles hoofdletters, PostgreSQL = alles kleine letters).

Snowflake → MS SQL

NVL en LENGTH bestaan niet in T-SQL — de formatter kent het juiste alternatief per dialect (ISNULL, LEN), niet zomaar één vaste vertaling.

Voor

SELECT NVL(discount, 0), LENGTH(customer_name)
FROM orders

Na

SELECT ISNULL(discount, 0), LEN(customer_name)
FROM orders

MS SQL → Snowflake

En de andere kant op: IIF, ISNULL en GETDATE() krijgen hun Snowflake-equivalent, inclusief de standaard-casing die bij dat dialect hoort.

Voor

select iif(amount>1000,'large','small'), isnull(notes,'-'), getdate()
from orders

Na

SELECT IFF(AMOUNT > 1000, 'LARGE', 'SMALL'), NVL(NOTES, '-'), CURRENT_TIMESTAMP
FROM ORDERS

2. Casing

Los instelbaar voor keywords, functienamen en identifiers (tabel- en kolomnamen): Behouden, Kleine letters of Hoofdletters. Zo kun je bijvoorbeeld keywords in hoofdletters willen zonder dat je kolomnamen mee veranderen.

Keywords upper, functies upper, identifiers lower

Een veelgebruikte combinatie: SQL-keywords en functies opvallend in hoofdletters, tabel- en kolomnamen juist consequent in kleine letters.

Voor

select Count(Order_Id), Customer_Name from Orders where Status = 'active'

Na

SELECT COUNT(order_id), customer_name
  FROM orders
 WHERE status = 'active'

3. Kolommen & aliassen

Zet elke SELECT-kolom op zijn eigen regel, kies of de komma voor of na de kolomnaam komt, en bepaal wat er met AS-aliassen gebeurt: toevoegen, verwijderen of laten staan — met een eigen casing voor het woord AS zelf.

Komma vóór + AS toevoegen (lowercase)

De standaardstijl van deze plugin: elke kolom op een eigen regel, komma aan het begin (zodat je 'm meteen ziet bij het scrollen), en een impliciete alias krijgt netjes zijn AS terug.

Voor

SELECT order_id, SUM(amount) total, customer_name FROM orders

Na

select order_id
     , sum(amount) as total
     , customer_name
  from orders

Komma ná + AS verwijderen

De klassieke stijl: komma aan het einde van de regel, en AS wordt juist weggehaald zodat de aliasnaam direct achter de expressie staat.

Voor

SELECT order_id, SUM(amount) AS total, customer_name FROM orders

Na

select order_id,
       sum(amount) total,
       customer_name
  from orders

4. Uitlijning

De handtekening-look van deze formatter: SELECT/FROM/WHERE rechts uitgelijnd op elkaars breedte (de klassieke 'trapjes'-stijl), en ON/AND binnen een JOIN uitgelijnd onder het einde van het JOIN-keyword.

Keywords rechts uitgelijnd

select/from/where krijgen allemaal dezelfde rechterkant, zodat de WHERE-voorwaarden direct onder de kolomnamen beginnen.

Voor

SELECT order_id FROM orders WHERE status = 'active'

Na

select order_id
  from orders
 where status = 'active'

ON uitgelijnd onder JOIN

Bij meerdere AND-voorwaarden in een JOIN sluiten ze mooi aan onder elkaar, in plaats van los tegen de linkerkant te plakken.

Voor

SELECT * FROM orders o JOIN customers c ON c.customer_id = o.customer_id AND c.active = 1

Na

select *
  from orders o
  join customers c
    on c.customer_id = o.customer_id
   and c.active = 1

5. Structuur

Hoe CASE-statements, CTE's (WITH-clausules), subqueries en puntkomma's worden opgebouwd: elk WHEN op zijn eigen regel of juist compact, CTE's met een lege regel ertussen, subqueries die relatief aan hun eigen ouder inspringen, en puntkomma's die je automatisch laat toevoegen of net verwijderen.

CASE: Expand vs. Inline

'Expand' zet elk WHEN op zijn eigen regel (goed leesbaar bij veel branches); 'Inline' houdt alles op één regel (compact voor korte CASE's).

Voor

SELECT CASE WHEN amount > 1000 THEN 'large' WHEN amount > 100 THEN 'medium' ELSE 'small' END AS size FROM orders

Na

select case
           when amount > 1000 then 'large'
           when amount > 100 then 'medium'
           else 'small'
       end as size
  from orders

CTE's: elk op nieuwe regel + inspringen

Bij meerdere CTE's in één WITH-clausule krijgt elke CTE zijn eigen blok met een lege regel ertussen, en springt de body van de CTE in onder de naam.

Voor

WITH a AS (SELECT 1), b AS (SELECT 2) SELECT * FROM a, b

Na

with a as (
         select 1
     )

   , b as (
         select 2
     )

select *
  from a
     , b

Puntkomma's automatisch toevoegen

Handig voor scripts met meerdere statements: elke statement die nog geen puntkomma heeft, krijgt er automatisch één — op de laatste regel, een eigen regel, of behouden zoals het was.

Voor

SELECT 1 FROM t
SELECT 2 FROM t

Na

select 1
  from t;

select 2
  from t;

6. Spacing

Spaties rond operators (a = b vs a=b) en binnen functie-haakjes (count( * ) vs count(*)), een lege regel tussen clausules, hoeveel lege regels tussen statements blijven staan, een maximale regellengte, en het automatisch uitwrappen van lange IN (...)-lijsten.

Operators: spaties toevoegen

a=b, a>b en a<>b krijgen allemaal spaties, zonder dat je losse regels voor elke operator hoeft te schrijven.

Voor

SELECT * FROM orders WHERE amount>=100 AND status<>'cancelled'

Na

select *
  from orders
 where amount >= 100
   and status <> 'cancelled'

Lange IN (...) -lijst uitwrappen

Stel een drempel in tekens; een IN-lijst die langer is, wordt automatisch over meerdere regels verdeeld in plaats van één onleesbare lange regel.

Voor

SELECT * FROM orders WHERE status IN ('active', 'pending', 'processing', 'shipped', 'delivered')

Na

select *
  from orders
 where status in ( 'active', 'pending', 'processing'
                  , 'shipped', 'delivered' )

7. JOINs

Één schakelaar: strip INNER en OUTER weg zodra ze overbodig zijn. INNER JOIN wordt JOIN, LEFT OUTER JOIN wordt LEFT JOIN — korter, en functioneel identiek.

INNER/OUTER strippen

Voor

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

Na

select *
  from orders o
  join customers c
    on c.id = o.customer_id
  left join shippers s
    on s.id = o.shipper_id

8. FQDN (volledig gekwalificeerde namen)

Vul een database- en/of schemanaam in, en elke tabelreferentie in FROM/JOIN wordt automatisch voorzien van dat voorvoegsel — handig als je met meerdere databases/schema's werkt en overal expliciet wilt zijn.

Database + schema toevoegen

Database = 'analytics', schema = 'public' — elke ongekwalificeerde tabel krijgt 'analytics.public.' ervoor, aliassen blijven onaangeroerd.

Voor

SELECT o.order_id FROM orders o JOIN customers c ON c.id = o.customer_id

Na

select o.order_id
  from analytics.public.orders o
  join analytics.public.customers c
    on c.id = o.customer_id

9. Profielen

Sla de complete combinatie van bovenstaande instellingen op onder een naam ('team-stijl', 'client-x', ...), en wissel er met één klik tussen. Exporteer als JSON om te delen met collega's, of importeer het profiel van een teamgenoot.

Extra: los van de Settings-dialoog

Drie functies die je direct vanuit het menu gebruikt, zonder dat je er iets voor hoeft in te stellen.

Convert Quotes

Wissel tussen enkele, dubbele en backtick-quotes voor strings en identifiers — bijvoorbeeld als je van MySQL naar PostgreSQL overstapt.

Voor

SELECT `customer_name` FROM `orders` WHERE `status` = "active"

Na

SELECT 'customer_name' FROM 'orders' WHERE 'status' = 'active'

Nummerformaat converteren

Zet Nederlandse notatie (1.234,56) om naar Engelse (1,234.56), of andersom — voorkomt fouten bij het overtypen van rapportcijfers.

Voor

SELECT * FROM orders WHERE amount > 1.234,56

Na

SELECT * FROM orders WHERE amount > 1,234.56

dbt / Jinja & no-format pragma

{{ ref(...) }}, {{ var }} en {# comment #} worden herkend en nooit gesplitst of van casing veranderd. Wil je een blok helemaal ongemoeid laten, wrap het dan in -- @formatter:off / -- @formatter:on.

Voor

select {{ ref('orders') }}.order_id
-- @formatter:off
from     weird_legacy_table   x
-- @formatter:on

Na

select {{ ref('orders') }}.order_id
-- @formatter:off
from     weird_legacy_table   x
-- @formatter:on