Utilia

SQL-formatering

Formatér SQL-forespørgsler til PostgreSQL, MySQL, SQL Server, Oracle, BigQuery og flere, med valg af store/små bogstaver og indrykning, i din browser.

Sådan formaterer du en SQL-forespørgsel

  1. Indsæt én eller flere forespørgsler, eller klik på Åbn fil for at indlæse en .sql-fil (op til 10 MB).
  2. Vælg Dialekt for din database, for eksempel PostgreSQL, MySQL eller SQL Server (T-SQL).
  3. Vælg, hvordan Nøgleord skal skrives (STORE BOGSTAVER, små bogstaver eller Behold som skrevet), og Indrykning.
  4. Sæt kryds ved Ingen mellemrum omkring operatorer, hvis du foretrækker a=b+1 frem for a = b + 1.
  5. Klik på Formatér SQL, og kopiér eller download derefter resultatet. Hvis du ændrer en indstilling, formateres forespørgslen igen.

Forespørgslen omformateres kun som tekst. Den køres aldrig og sendes aldrig til en database eller en server.

Hvad formateringen gør

Værktøjet bruger biblioteket sql-formatter, som er open source. Det deler hver sætning op i klausuler og sætter hvert klausul-nøgleord (SELECT, FROM, WHERE, GROUP BY, ORDER BY …) på sin egen linje, med klausulens indhold indrykket nedenunder. Kolonner i en SELECT-liste placeres én pr. linje, betingelser med AND og OR begynder på nye linjer, og underforespørgsler og CASE-udtryk rykkes ind efter indlejringsniveau. Korte udtryk i parentes bliver på én linje. Flere sætninger adskilt af semikolon holdes adskilt af en tom linje.

Kun mellemrum og store/små bogstaver ændres. Strengliteraler, identifikatorer i anførselstegn og kommentarer bevares nøjagtigt, så den formaterede forespørgsel giver det samme resultat som den oprindelige.

Hvorfor dialekten betyder noget

SQL-databaser deler kernesproget, men afviger i detaljerne, og en formatering skal kende dem for at læse forespørgslen rigtigt:

  • identifikatorer sættes i "dobbelte anførselstegn" i standard-SQL og PostgreSQL, i `backticks` i MySQL, MariaDB og BigQuery og i [kantede parenteser] i SQL Server;
  • operatorer som PostgreSQLs ->> og ::-typekonverteringer eller Snowflakes :-stiadgang findes kun i nogle dialekter;
  • pladsholdere til parametre er forskellige: ?, $1, :name eller @name;
  • hver dialekt har sine egne reserverede ord og funktioner, som valget Nøgleord ændrer.

Hvis du får meddelelsen »Forespørgslen kunne ikke fortolkes«, så tjek først, at den valgte dialekt svarer til din database. Fejlen viser linjen og kolonnen, hvor fortolkningen stoppede. Standard-SQL er det mest restriktive valg; vælg din faktiske database, når det er muligt.

Store/små bogstaver og stiltips

Nøgleord med store bogstaver er stadig den mest almindelige konvention, fordi de med et blik adskiller sproget fra tabel- og kolonnenavne. Små bogstaver er populære i teams, der synes, det er lettere at læse, og Behold som skrevet lader dit valg være urørt. Navne på tabeller, kolonner og funktioner ændres aldrig: kun reserverede nøgleord følger indstillingen. Til lange filer gør ensartet formatering det også meget lettere at gennemgå forskelle mellem versioner.

Ofte stillede spørgsmål

Hvilke dialekter understøttes?

Standard-SQL, PostgreSQL, MySQL, MariaDB, SQLite, SQL Server (T-SQL), Oracle (PL/SQL), Google BigQuery, Snowflake, Amazon Redshift, IBM Db2, Db2 for i, Apache Hive, Spark SQL, Trino/Presto, DuckDB, ClickHouse, SingleStoreDB, TiDB og Couchbase N1QL.

Kontrollerer værktøjet, at min forespørgsel er gyldig?

Nej. Det kontrollerer, at forespørgslen kan læses i den valgte dialekt, men ikke at tabellerne eller kolonnerne findes, eller at forespørgslen kan køre. Det kan kun din database bekræfte.

Kan det formatere lagrede procedurer?

Delvist. Sætninger inde i procedurer formateres, men proceduremæssige blokke (BEGIN … END, løkker, DECLARE) opstilles mere enkelt end i et dedikeret udviklingsmiljø.

Bliver min forespørgsel sendt til en server?

Nej. Formateringen kører i din browser, så forespørgsler med tabelnavne eller data bliver på din computer.

Hvorfor står min kommentar et andet sted?

Kommentarer bevares, men en kommentar i slutningen af en linje kan følge med det element, den står efter, når det element flyttes til en ny linje.