Подготовьте запрос из лога к разбору
SQL из ORM или журнала приложения нередко занимает одну длинную строку. Форматтер SQL добавляет переносы и отступы, чтобы было проще найти список столбцов, условие JOIN или вложенный запрос. Это удобно при разборе чужого кода и подготовке к ревью.
Вставьте запрос, укажите диалект и выберите два пробела, четыре пробела либо табуляцию. Настройте регистр ключевых слов и запустите форматирование. Исходник останется рядом с результатом. При изменении текста или параметров старый результат очищается — перед копированием его нужно создать заново.
Выбирайте диалект исходного запроса
Доступны стандартный SQL, PostgreSQL, MySQL, MariaDB, SQLite, SQL Server (T-SQL), Oracle SQL, BigQuery и Snowflake. Диалект определяет, как распознаются специфические ключевые слова и обозначения идентификаторов, например обратные кавычки или квадратные скобки.
Переключатель не переносит запрос в другую СУБД. Он не заменяет функции и не адаптирует схему данных. Поддержка Oracle SQL также не означает, что можно форматировать любые хранимые процедуры.
Читаемость помогает проверке, но не заменяет её
Отдельные блоки WHERE и HAVING помогают сопоставить фильтрацию строк и групп. Отступы показывают уровни CTE и подзапросов. Однако по аккуратному оформлению нельзя определить, правильно ли запрос реализует нужное условие.
Регистр меняется только у распознанных ключевых слов. Написание идентификаторов, имён функций и типов данных сохраняется. Значения параметров не подставляются. Комментарии остаются, хотя их расположение может измениться. Проверяйте полученный SQL в контексте своей базы.
Примеры форматирования SQL
В примерах используются вымышленные данные, ключевые слова в верхнем регистре и отступ в два пробела. Загрузка примера в редактор также выбирает нужный диалект.
JOIN и агрегирование
Оплаченные заказы группируются по клиенту, затем отбираются по сумме. Условия соединения и фильтры видны отдельно.
SELECT
c.id,
c.name,
count(o.id) AS order_count,
sum(o.total) AS revenue
FROM
customers c
JOIN orders o ON o.customer_id = c.id
WHERE
o.status = 'paid'
GROUP BY
c.id,
c.name
HAVING
sum(o.total) > 1000
ORDER BY
revenue DESC;Вернуться к форматтеру ↑CTE и оконная функция
CTE в PostgreSQL с ROW_NUMBER нумерует заказы каждого клиента. Отступы показывают вложенный SELECT.
WITH
ranked_orders AS (
SELECT
id,
customer_id,
total,
row_number() OVER (
PARTITION BY
customer_id
ORDER BY
created_at DESC
) AS position
FROM
orders
WHERE
created_at >= date '2024-01-01'
)
SELECT
customer_id,
id,
total
FROM
ranked_orders
WHERE
position = 1
ORDER BY
customer_id;Вернуться к форматтеру ↑INSERT и комментарии
Пример MySQL с обратными кавычками, комментарием и точкой с запятой внутри строки. Содержимое строки остаётся данными.
-- Fictional seed data
INSERT INTO
`products` (`sku`, `name`, `price`)
VALUES
('DEMO-01', 'Desk lamp; warm light', 29.95),
('DEMO-02', 'Reader''s notebook', 8.50);Вернуться к форматтеру ↑Частые вопросы
Как сохранить результат?
Скопируйте его кнопкой или скачайте файл formatted.sql. Форматирование также запускается сочетанием Ctrl+Enter либо Command+Enter в macOS.
Запрос отправляется на сервер?
Обработка идёт в Web Worker внутри браузера. Инструмент не отправляет SQL в API форматирования, не подключается к базе, не сохраняет ввод на постоянной основе и не добавляет его в URL.
Форматтер проверяет ошибки и ускоряет запрос?
Нет. Он упорядочивает пробелы, переносы и регистр ключевых слов. Таблицы, столбцы, типы, права доступа и планы выполнения не проверяются. Для валидации и анализа производительности нужны инструменты СУБД.
Можно вставить несколько операторов?
Да, обычные SQL-операторы можно разделить точкой с запятой. Этот знак внутри распознанной строки остаётся частью данных. Собственные DELIMITER, процедуры и команды конкретного клиента не входят в поддерживаемый сценарий.
Почему форматирование завершается ошибкой?
Проверьте диалект, парность кавычек и скобок. Шаблоны и вставки из кода приложения могут не распознаваться. Лимит ввода — 50 000 символов; через десять секунд задача останавливается. Длинные скрипты лучше разбить на части.
Что будет с комментариями и параметрами?
Комментарии сохраняются, но их оформление может измениться. Поддерживаемые параметры выбранного диалекта не заменяются значениями. Комментарии, отключающие форматтер, могут оставить отдельные участки без обработки.
