Форматтер SQL
Вставьте однострочный SQL-оператор, скопированный из лога или ORM, и форматтер разобьет его на отступленные клаузы с единообразным регистром ключевых слов, переносами строк перед SELECT, FROM, WHERE, GROUP BY и выровненными столбцами в проекции. Поддерживает диалекты MySQL, PostgreSQL, SQL Server, Oracle, SQLite и BigQuery, у каждого слегка различающиеся ключевые и зарезервированные слова.
Как работает форматирование
-
1
Вставьте ваш SQL
Однострочный блок, минифицированный вывод из Hibernate, что угодно. Несколько операторов, разделенных `;`, форматируются все.
-
2
Выберите диалект и стиль
Диалект управляет списком ключевых слов; стиль управляет расположением запятых (ведущие или хвостовые), шириной отступа и регистром ключевых слов.
-
3
Токены разбираются, а не заменяются регулярками
Токенизатор корректно обрабатывает строки, комментарии, скобки и подзапросы. Строковые литералы сохраняются дословно.
-
4
Скопируйте отформатированный вывод
Проверенный SQL: та же семантика, более чистая компоновка.
До и после
До:
SELECT u.id,u.name,COUNT(o.id) AS orders FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at>='2024-01-01' GROUP BY u.id,u.name HAVING COUNT(o.id)>5 ORDER BY orders DESC LIMIT 50;
После (ведущая запятая, ключевые слова в верхнем регистре, отступ 2 пробела):
SELECT
u.id
, u.name
, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o
ON o.user_id = u.id
WHERE u.created_at >= '2024-01-01'
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5
ORDER BY orders DESC
LIMIT 50;
Стилевые решения, которые важны
- Верхний против нижнего регистра ключевых слов. UPPERCASE традиционен и легко считывается. Нижний регистр чище в современных редакторах кода с подсветкой синтаксиса.
- Ведущие против хвостовых запятых. Ведущие (
, col) упрощают комментирование одного столбца. Хвостовые (col,) читаются естественнее в тексте. - Расположение запятых в
GROUP BY. Часто по одной на строку для длинных клауз, в строку для коротких. - Отступ JOIN.
ONна следующей строке (висячий отступ) или на той же строке. Длинные условия выигрывают от висячего отступа. - Подзапросы. Отступайте весь подзапрос, а не только открывающую скобку.
Особенности диалектов
- Обратные кавычки MySQL против двойных кавычек PostgreSQL для идентификаторов.
- CTE
WITH, у MS SQL есть требование;передWITH; форматтер это учитывает. - Оконные функции, длинные клаузы
OVER (...)выигрывают от перенесенных по строкамPARTITION BYиORDER BY. - BigQuery имеет
ARRAY_AGG,STRUCTи суффиксы таблиц (*_yyyymmdd), которые токенизатор не должен ломать. - Oracle имеет синтаксис внешнего соединения
(+), форматтер его сохраняет, но помечает как устаревший.
Чего форматтер не делает
- Не исправляет ошибки, некорректный JOIN остается некорректным.
- Не разворачивает
SELECT *, списки столбцов не выводятся из схемы. - Не оптимизирует запросы, только компоновка, не планы выполнения.
- Не переписывает подзапросы в CTE, это другая задача.
Часто задаваемые вопросы
Нет, он чисто косметический. Пробелы, переносы строк и расположение запятых перемещаются, но ключевые слова, операторы, литералы и идентификаторы сохраняются в точности.
Поддерживаются, CREATE TABLE, ALTER, CREATE PROCEDURE, триггеры. Форматтер обрабатывает блочные конструкции (BEGIN ... END) и продолжения строк внутри процедур.
Не должен, если это происходит, вероятно, это несоответствие диалекта. Попробуйте переключить диалект. Сообщайте о стойких сбоях; мы относимся к ним как к багам.
Flink SQL и Cassandra CQL выглядят похоже, но имеют диалект-специфичные ключевые слова, которые обычные форматтеры портят. Используйте с осторожностью и проверяйте, что вывод выполняется.
Сопутствующие инструменты
Генератор вымышленных телефонных номеров
Создавайте до 50 вымышленных номеров из официально зарезервированных диапазонов пяти стран.
Генератор конфигурации webpack
Создайте webpack.config.js для webpack 5 под чистый JavaScript, React или Vue: TypeScript, Babel, CSS или Sass, изображения, HtmlWebpackPlugin, dev-сервер и команда npm install.
Генератор случайных букв
Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.
Проверка телефонных номеров
Проверьте структуру номера по стране и получите регион, тип, форматы E.164, международный, национальный и RFC 3966.
Валидатор XSD
Проверьте XML-документ в соответствии с схемой XSD и выявите несоответствия между элементами и их типами, указав точные номера строк.
Конвертер размера файлов
Преобразуйте значения между байтами, КБ, МБ, ГБ, ТБ и двоичными единицами IEC (KiB, MiB, GiB, TiB), свободно сочетая десятичные и двоичные единицы.
Инструмент доступен на других языках
- Định dạng SQL [VI]
- SQL-Formatter [DE]
- Format SQL [ID]
- SQL 포매터 [KO]
- SQL-formatter [NL]
- SQL-formaterare [SV]
- Formateador SQL [ES]
- รูปแบบ SQL [TH]
- SQLフォーマッター [JA]
- تنسيق SQL [AR]
- Formater SQL [PL]
- Formateur SQL [FR]
- Formatador SQL [PT]
- SQL Formatter [EN]
- Formatter SQL [IT]
- SQL Biçimlendirici [TR]
- SQL 格式化器 [ZH]