Форматирование SQL онлайн — красивые запросы с отступами
Форматирование SQL (MySQL, PostgreSQL и другие диалекты, регистр ключевых слов, отступы)
Работает в браузере · файлы никуда не загружаются
Что это за инструмент
Запрос, скопированный из лога или ORM, часто приходит одной длинной строкой или с беспорядочными отступами — такой трудно читать и ревьюить. Инструмент разбивает SQL на предложения SELECT, FROM, WHERE и т. д. и расставляет единообразные отступы. Результат обновляется по мере ввода.
Как пользоваться
- Вставьте SQL в поле ввода. Можно несколько операторов через точку с запятой.
- Выберите диалект вашей базы данных.
- Выберите ВЕРХНИЙ или нижний регистр ключевых слов либо оставьте как есть.
- Выберите отступ — 2 пробела, 4 пробела или табуляция — и скопируйте результат.
Как это работает
- Форматирование выполняет библиотека с открытым кодом
sql-formatter. Она разбивает ввод на токены, а затем расставляет переводы строк и отступы по глубине предложений и скобок. - Поддерживаемые диалекты: Standard SQL, MySQL, PostgreSQL, MariaDB, SQLite, BigQuery, Oracle (PL/SQL) и SQL Server (T-SQL). От диалекта зависит, как читаются кавычки идентификаторов (
`,",[ ]), маркеры параметров (?,$1,@name) и операторы. - Плейсхолдеры MyBatis
#{id},#{name,jdbcType=VARCHAR}и${table}сохраняются как есть в любом диалекте. В MySQL#обычно начинает комментарий, но#{считается плейсхолдером. Плейсхолдер, занимающий несколько строк, тоже сохраняется; вложенные фигурные скобки вроде#{list[${i}]}не поддерживаются. - Параметры привязки:
?и:nameв Standard SQL, MySQL и MariaDB;$1и:nameв PostgreSQL;:nameв Oracle;@nameв SQL Server и BigQuery; SQLite принимает?,?1,:name,@nameи$name. - В ошибке указываются строка, столбец и текст, на котором остановился разбор.
- Настройка регистра касается только зарезервированных слов. Строковые литералы, комментарии и идентификаторы, включая имена таблиц и столбцов на кириллице, не меняются.
- Вариант с табуляцией ставит один символ табуляции на уровень отступа.
- Инструмент только переформатирует: он не выполняет запрос и не проверяет его смысл.
Примеры
Ввод:
select id, name from users where age > 20 and city = 'Москва' order by name
Результат (Standard SQL, верхний регистр, 2 пробела):
SELECT
id,
name
FROM
users
WHERE
age > 20
AND city = 'Москва'
ORDER BY
name
Частые вопросы
Мой запрос отправляется на сервер?
Нет. Форматирование выполняется в браузере библиотекой sql-formatter, запросы не передаются и не сохраняются. И все же не показывайте на общем экране запросы с настоящими паролями или персональными данными.
Какой диалект выбрать?
Тот, который соответствует вашей СУБД. Тогда синтаксис диалекта распознается правильно, например обратные кавычки MySQL, приведение типов `::` и параметры `$1` в PostgreSQL. Если не уверены, начните со Standard SQL.
Может ли форматирование изменить смысл запроса?
Меняются только пробелы, переводы строк и регистр ключевых слов. Строковые литералы, комментарии и идентификаторы сохраняют содержимое, а смена регистра никогда не затрагивает значения в кавычках, поэтому запрос работает так же.
Что делать, если выводится ошибка?
Парсер может остановиться на незакрытой кавычке или символе, который выбранный диалект не поддерживает. Проверьте место, указанное в сообщении, или попробуйте другой диалект. Это форматировщик, а не валидатор, так что он не найдет все ошибки в SQL.