Utilia

Formatador de SQL

Formata consultas SQL para PostgreSQL, MySQL, SQL Server, Oracle, BigQuery, Snowflake e outros, com opções de maiúsculas e indentação, no navegador.

Como formatar uma consulta SQL

  1. Cola uma ou mais consultas, ou clica em Abrir um ficheiro para carregar um ficheiro .sql (até 10 MB).
  2. Escolhe o Dialeto da tua base de dados, por exemplo PostgreSQL, MySQL ou SQL Server (T-SQL).
  3. Escolhe como escrever as Palavras-chave (MAIÚSCULAS, minúsculas ou Manter como escrito) e a Indentação.
  4. Marca Sem espaços à volta dos operadores se preferires a=b+1 a a = b + 1.
  5. Clica em Formatar SQL e depois copia ou transfere o resultado. Mudar uma opção volta a formatar a consulta.

A consulta é apenas reformatada como texto. Nunca é executada nem enviada para uma base de dados ou um servidor.

O que faz o formatador

A ferramenta usa a biblioteca de código aberto sql-formatter. Divide cada instrução em cláusulas e põe cada palavra-chave de cláusula (SELECT, FROM, WHERE, GROUP BY, ORDER BY…) numa linha própria, com o conteúdo da cláusula indentado por baixo. As colunas de uma lista SELECT ficam uma por linha, as condições AND e OR começam em linhas novas, e as subconsultas e expressões CASE são indentadas segundo o nível de aninhamento. As expressões curtas entre parênteses ficam numa só linha. Várias instruções separadas por ponto e vírgula ficam separadas por uma linha em branco.

Só mudam os espaços em branco e as maiúsculas/minúsculas. Os literais de texto, os identificadores entre aspas e os comentários são mantidos exatamente como estão, por isso a consulta formatada devolve o mesmo resultado que a original.

Porque é que o dialeto importa

As bases de dados SQL partilham o núcleo da linguagem, mas diferem nos pormenores, e um formatador tem de os conhecer para ler a consulta corretamente:

  • os identificadores são delimitados com "aspas duplas" no SQL padrão e no PostgreSQL, com `acentos graves` no MySQL, no MariaDB e no BigQuery, e com [parênteses retos] no SQL Server;
  • operadores como o ->> e as conversões :: do PostgreSQL, ou o acesso por caminho : do Snowflake, só existem em alguns dialetos;
  • os marcadores de parâmetros variam: ?, $1, :name ou @name;
  • cada dialeto tem as suas próprias palavras reservadas e funções, que a opção Palavras-chave altera.

Se aparecer «Não foi possível analisar a consulta», confirma primeiro que o dialeto escolhido corresponde à tua base de dados. O erro mostra a linha e a coluna onde a análise parou. SQL padrão é a escolha mais restritiva; escolhe a tua base de dados real sempre que possível.

Maiúsculas nas palavras-chave e dicas de estilo

As palavras-chave em maiúsculas continuam a ser a convenção mais comum, porque distinguem de relance a linguagem dos nomes de tabelas e colunas. As minúsculas são populares em equipas que as acham mais fáceis de ler, e Manter como escrito deixa a tua escolha intacta. Os nomes de tabelas, colunas e funções nunca são alterados: só as palavras reservadas seguem a opção. Em ficheiros longos, uma formatação consistente também torna muito mais fácil rever as diferenças entre versões.

Perguntas frequentes

Que dialetos são suportados?

SQL padrão, 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 e Couchbase N1QL.

A ferramenta verifica se a minha consulta é válida?

Não. Verifica se a consulta pode ser lida no dialeto escolhido, mas não se as tabelas ou colunas existem nem se a consulta correria. Só a tua base de dados o pode confirmar.

Consegue formatar procedimentos armazenados?

Em parte. As instruções dentro dos procedimentos são formatadas, mas os blocos procedimentais (BEGIN … END, ciclos, DECLARE) são dispostos de forma mais simples do que num IDE dedicado.

A minha consulta é enviada para um servidor?

Não. A formatação corre no teu navegador, por isso as consultas com nomes de tabelas ou dados ficam no teu computador.

Porque é que o meu comentário mudou de sítio?

Os comentários são mantidos, mas um comentário no fim de uma linha pode mover-se com o elemento que o precede quando esse elemento passa para uma linha nova.