Pack Camo

SQL форматер и бьютифайер

Отступы и аккуратное оформление SQL для PostgreSQL, MySQL, SQLite, SQL Server и других.

Всё выполняется локально — ничего не отправляется на сервер.

SQL

7 строк · 442 символа

Отформатированный SQL

Форматирование…

Читаемый SQL на вашем диалекте

Этот SQL форматер принимает запрос любой длины, даже несколько операторов сразу, и единообразно расставляет отступы: одно предложение на строку, столбцы и условия выровнены, ключевые слова в нужном вам регистре. Он понимает синтаксис более пятнадцати диалектов, от PostgreSQL, MySQL и SQL Server до BigQuery, Snowflake и Oracle PL/SQL, поэтому операторы, кавычки и плейсхолдеры каждого диалекта сохраняются. Переключитесь на «Сжать», чтобы снова собрать запрос в одну строку для конфигурационного файла или строки в коде. Всё работает в вашем браузере; запросы никуда не загружаются.

Как отформатировать SQL-запрос

  1. 1Вставьте SQL в левую панель или начните с примера запроса.
  2. 2Выберите диалект, на котором написан запрос. Standard SQL подходит для большинства простых запросов; правильный диалект важен для таких вещей, как приведения :: в PostgreSQL, идентификаторы в обратных кавычках в MySQL или [brackets] в SQL Server.
  3. 3Задайте регистр ключевых слов и отступы, а в разделе Дополнительные параметры — регистр типов данных и функций, табличные отступы, положение AND/OR и пустые строки между операторами.
  4. 4Отформатированный запрос появляется справа по мере ввода. Если запрос не удаётся разобрать, показываются строка и столбец с ошибкой.
  5. 5Скопируйте результат, скачайте его как файл .sql или выберите Сжать, чтобы свернуть его в одну строку.

Зачем форматировать SQL?

SQL пишут один раз, а читают много раз: на code review, в логе медленных запросов, в миграции, которую кому-то придётся отлаживать в 2 часа ночи. Запрос, сгенерированный ORM или скопированный из лога, обычно приходит одной огромной строкой. Если каждое предложение стоит на своей строке, а подзапросы выделены отступом, структура становится видна: какие таблицы соединяются, по чему и какие условия где действуют.

Единое форматирование также уменьшает диффы. Когда вся команда форматирует запросы одинаково, изменённое условие видно как одна изменённая строка, а не как перестроенный абзац.

Параметры форматирования

Регистр ключевых слов
UPPER выделяет SELECT, FROM и WHERE на фоне имён таблиц и столбцов — самое распространённое соглашение. lower подойдёт командам, которым заглавные буквы кажутся шумными. «Как есть» оставляет ключевые слова в том виде, в каком вы их набрали.
Отступы
Два или четыре пробела либо табуляция. Табличные стили вместо этого дополняют ключевые слова до столбца фиксированной ширины, чтобы выражения после них были выровнены.
Положение AND / OR
«В начале строки» ставит каждый логический оператор в начало строки, так что одно условие легко закомментировать; «в конце строки» оставляет его в конце предыдущей строки.
Ширина выражения
Выражения в скобках короче этого числа символов остаются на одной строке; более длинные разбиваются.
Плотные операторы
Пишет a+b вместо a + b. Компактно, но читается хуже.

Как выбрать диалект

Диалекты SQL различаются сильнее, чем кажется: как экранируются идентификаторы ("name", `name` или [name]), как выглядит плейсхолдер (?, $1, :name, @param) и какие слова зарезервированы. Форматер использует отдельную грамматику для каждого диалекта, поэтому не примет тело функции $$ в PostgreSQL или комментарий # в MySQL за что-то другое.

Если вы видите ошибку разбора для запроса, который точно корректен, первым делом проверьте диалект. Standard SQL намеренно строг и знает не все расширения производителей.

Сжатие SQL

Сжатие — противоположность форматирования: комментарии удаляются, а все пробельные символы сводятся к одиночным пробелам, и получается одна строка, которую можно вставить в YAML-файл, переменную окружения или строковый литерал. Строковые литералы, идентификаторы в кавычках и тела в долларовых кавычках копируются без изменений, поэтому значение вроде 'two spaces' сохраняет оба пробела. Подсказки оптимизатора вида /*+ … */ и исполняемые комментарии MySQL /*! … */ сохраняются, потому что влияют на выполнение запроса.

Работаете с JSON? JSON Formatter делает то же самое для JSON-документов, а минификатор кода обрабатывает CSS, JavaScript и HTML.

Часто задаваемые вопросы

Отправляется ли мой SQL на сервер?
Нет. Форматирование и сжатие полностью выполняются в вашем браузере, поэтому запросы с именами таблиц, данными клиентов или учётными данными не покидают ваше устройство.
Какие диалекты SQL поддерживаются?
Standard SQL, PostgreSQL, MySQL, MariaDB, SQLite, SQL Server (T-SQL), Oracle PL/SQL, BigQuery, Snowflake, Amazon Redshift, Spark SQL, Hive, Trino и Presto, DuckDB, ClickHouse, IBM Db2 и Db2 for IBM i, SingleStoreDB, TiDB и Couchbase N1QL.
Меняет ли форматирование то, что делает запрос?
Нет. Меняются только пробелы и, если вы выберете, регистр ключевых слов, типов данных и функций. Идентификаторы в кавычках и строковые литералы никогда не изменяются. Менять регистр идентификаторов без кавычек безопасно в большинстве СУБД, но оставьте «Как есть», если ваша база данных чувствительна к их регистру.
Почему возникает ошибка разбора?
Либо в запросе есть синтаксическая ошибка, например незакрытая скобка или кавычка, либо он использует синтаксис, которого нет в выбранном диалекте. В сообщении указаны строка и столбец, где остановился разбор; попробуйте диалект, который реально использует ваша СУБД.
Можно ли отформатировать несколько операторов сразу?
Да. Разделите их точкой с запятой — каждый будет отформатирован по очереди, с выбранным вами числом пустых строк между ними.
Сохраняются ли комментарии?
При форматировании — да: строчные и блочные комментарии остаются на месте. Сжатие удаляет их, кроме подсказок оптимизатора и исполняемых комментариев MySQL.
Как сжать SQL-запрос в одну строку?
Выберите «Сжать» вверху инструмента. Комментарии удаляются, пробелы сводятся, а строковые литералы и идентификаторы в кавычках остаются точно такими, как написаны.