Formatez vos requêtes SQL pour les rendre plus lisibles.
Les résultats sont fournis à titre informatif. Vérifiez-les auprès d'autres sources.
Calculé dans votre navigateur. Rien de ce que vous saisissez n'est envoyé.
Ce formateur compare des mots-clés, il cassera donc une chaîne contenant le mot FROM
Il découpe votre requête aux espaces et à la ponctuation et insère un saut de ligne devant chacun de vingt-trois mots-clés. Il ignore totalement ce qu'est une chaîne littérale. Formatez SELECT name FROM t WHERE label = 'order from stock' et le littéral revient en 'order\nfrom stock' : un saut de ligne entre les guillemets, et une requête qui ne filtre plus la même chose.
Comment ça marche
- Réduit toutes les suites d'espaces, puis découpe la requête en jetons aux espaces, parenthèses, virgules et points-virgules.
- Commence une nouvelle ligne devant chacun des vingt-trois mots-clés de clause, sans tenir compte de la casse.
- Suit l'imbrication par les parenthèses ouvrantes et fermantes et indente de deux espaces par niveau.
pour chaque jeton :
si le jeton est ')' → indentation = max(0 ; indentation − 1)
si le jeton est un mot-clé de clause → émettre un saut de ligne + deux espaces × indentation
émettre le jeton inchangé
si le jeton est '(' → indentation = indentation + 1Exemple chiffré
Une requête dont le texte contient un mot-clé entre guillemets.
- entrée : SELECT name FROM t WHERE label = 'order from stock'
- SELECT, FROM et WHERE ouvrent chacun une nouvelle ligne, comme prévu
- le mot from entre guillemets est également reconnu, car les guillemets sont invisibles pour la comparaison
- la sortie place un saut de ligne entre 'order et from stock'
- le littéral n'est plus la même chaîne qu'auparavant
Trois sauts de ligne voulus et un qui change le sens de la requête. Tout ce qui est hors des chaînes se formate correctement ; tout ce qui est dedans est menacé.
Lire le résultat
- Vérifiez toute requête contenant du texte entre guillemets avant d'utiliser le résultat. Les commentaires présentent le même risque : un mot-clé dans un commentaire reçoit aussi un saut de ligne, et dans un commentaire d'une seule ligne ce saut peut renvoyer la suite du commentaire sur une ligne de SQL active.
- L'indentation ne suit que les parenthèses : elle reflète la profondeur d'imbrication et non la structure des clauses. Une longue requête plate sans parenthèses ressort sans aucune indentation quel que soit son nombre de clauses, ce qui est correct pour cette règle et souvent pas ce que vous vouliez.
- La liste de mots-clés est fixe et généraliste. La syntaxe propre à un dialecte — fonctions de fenêtrage, expressions de table communes, extensions d'éditeur, MERGE — n'y figure pas et restera sur la ligne au lieu d'obtenir la sienne.
- Seuls des espaces sont ajoutés. Les jetons sont restitués exactement tels que vous les avez saisis : votre casse est préservée et aucun mot-clé n'est réécrit ; l'outil change la mise en page, pas le texte.
Questions fréquentes
- Peut-on l'utiliser sans risque sur des requêtes de production ?
- Formatez d'abord, puis lisez la sortie avant de vous en servir. L'outil ne réécrit jamais vos jetons, mais il peut insérer un saut de ligne dans une chaîne entre guillemets ou un commentaire, et dans les deux cas le SQL obtenu signifie autre chose que ce que vous avez collé.
- Pourquoi ma sous-requête n'est-elle pas indentée ?
- L'indentation dépend uniquement des parenthèses. Une sous-requête entre parenthèses s'indente ; une suite de jointures et de clauses sans parenthèses non, car l'outil n'a aucun modèle de la structure des clauses sur lequel s'appuyer.