tigtools

Форматировщик SQL

Вставьте запрос, выберите диалект базы данных и получите аккуратно оформленный SQL с единообразными отступами. Данные не отправляются на сервер.

Работает в браузере Без регистрации

Отступ

Как пользоваться

  1. Вставьте один или несколько SQL-запросов или нажмите «Попробовать пример».
  2. Выберите диалект вашей базы данных, чтобы инструмент правильно распознавал ключевые слова, кавычки и операторы.
  3. Настройте регистр ключевых слов и отступы. Отформатированный запрос появится справа по мере ввода.
  4. Нажмите «Минифицировать», чтобы получить версию в одну строку, затем скопируйте результат или скачайте его в виде файла .sql.

Как это работает

Форматирование выполняется с помощью библиотеки sql-formatter с открытым исходным кодом. Она разбивает запрос на токены по правилам выбранного диалекта, размещает каждую основную часть (SELECT, FROM, JOIN, WHERE, GROUP BY, ORDER BY…) на отдельной строке, добавляет отступы для списков столбцов и условий и применяет выбранный регистр ключевых слов. Меняется пробельное форматирование и, если включена эта настройка, регистр ключевых слов; идентификаторы, строковые литералы и комментарии сохраняются. Важно выбрать правильный диалект: например, в MySQL имена заключают в обратные кавычки, в SQL Server — в квадратные скобки, а в PostgreSQL $$ обозначает начало тела функции.

Форматировщик отвечает за расположение кода, а не за работу с базой данных. Он не проверяет, существуют ли таблицы или столбцы, и не проверяет всю грамматику, поэтому может без предупреждений отформатировать некорректный SQL. Если он не может разобрать входные данные, например из-за незакрытой скобки, то указывает строку и столбец, на которых остановился.

Минификация работает иначе: она сохраняет все токены, лишь заменяя каждую последовательность пробельных символов одним пробелом и удаляя комментарии (подсказки оптимизатору, например /*+ INDEX(t) */, и комментарии MySQL /*! … */ сохраняются, поскольку они меняют поведение). Строки, идентификаторы в кавычках и тела в долларовых кавычках копируются без изменений. Если кавычка или комментарий не закрыты, минификатор выдаёт ошибку, а не пытается угадать.

Примеры

Чтение запроса из журнала

В журнале медленных запросов обнаружилась строка длиной 400 символов. При выборе диалекта MySQL и верхнего регистра ключевых слов она превращается в удобочитаемый блок, где каждый JOIN и каждое условие WHERE находятся на отдельной строке. Так проще заметить, что не хватает индекса.

Единый стиль для проверки кода

Перед коммитом команда форматирует каждую миграцию с диалектом PostgreSQL, ключевыми словами в нижнем регистре и отступом в 4 пробела. Так в diff видны только реальные изменения.

Встраивание SQL в код

Минификатор превращает многострочный запрос отчёта с комментариями в одну строку, например SELECT id, name FROM users WHERE active = 1 ORDER BY name, которую можно вставить в строку скрипта.

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

Какие базы данных поддерживаются?

Standard SQL, MySQL, MariaDB, PostgreSQL, SQLite, SQL Server (T-SQL), Oracle PL/SQL, BigQuery, Snowflake, Redshift, Spark SQL, Hive, Trino/Presto, DuckDB, IBM Db2, SingleStoreDB, TiDB и Couchbase N1QL.

Изменит ли форматирование результат выполнения запроса?

Не должно: меняется только пробельное форматирование и, если выбрана эта настройка, регистр ключевых слов. Регистр ключевых слов не влияет на SQL. Тем не менее проверьте результат перед запуском на рабочих данных, особенно если используются необычные возможности диалекта.

Почему появилось сообщение «не удалось отформатировать»?

Токенизатор встретил конструкцию, которую не смог обработать. Часто это незакрытая скобка или кавычка либо синтаксис другого диалекта. Проверьте строку и столбец, указанные в сообщении, и убедитесь, что выбранный диалект соответствует вашей базе данных.

Инструмент проверяет мой SQL?

Нет. Инструмент не подключается к базе данных и не знает её схему. Запрос может быть отформатирован, но при запуске всё равно завершиться ошибкой.

Конфиденциальность

SQL форматируется в браузере с помощью JavaScript. Он не загружается на сервер, не сохраняется и не включается в аналитику. Инструмент никогда не подключается к базе данных.