Как отформатировать SQL-запрос
- Вставьте один запрос или целый скрипт — несколько операторов через точку с запятой тоже подойдут. Форматирование идёт сразу при вставке.
- Выберите вашу СУБД в поле Диалект, чтобы правильно читались её кавычки (см. таблицу ниже). По умолчанию стоит PostgreSQL. Затем выберите, как писать ключевые слова: ПРОПИСНЫМИ, строчными или как написано.
- Выберите Форматировать — по предложению на строку с отступом в 2 или 4 пробела либо табуляцией — или В одну строку, чтобы ужать каждый оператор в одну строку для лога, конфигурации или строки в коде.
- Нажмите Копировать рядом с результатом или Скачать, чтобы сохранить файл .sql.
Как раскладывается запрос
Форматер читает SQL как последовательность лексем — ключевых слов, имён, строк, чисел, операторов, комментариев — и раскладывает их по нескольким фиксированным правилам:
- Главные предложения начинают строку:
SELECT,FROM,WHERE,GROUP BY,HAVING,ORDER BY,SET,VALUESиRETURNINGполучают свою строку, а содержимое — отступ ниже; уLIMIT,UNION,INSERT INTO,UPDATE,DELETE FROM,WITHиCREATE TABLEсодержимое остаётся на той же строке. - Списки — по элементу на строку: столбцы
SELECT, строкиVALUES, присваиванияSET, столбцыCREATE TABLEи общие табличные выраженияWITH. Запятые внутри вызовов функций и списковIN (…)остаются в строке. - Соединения стоят под
FROM,ON— на той же строке; каждоеANDилиORвWHERE,HAVINGили условии соединения начинает новую строку — кромеANDвнутриBETWEEN … AND …. - Подзапросы вкладываются: скобка, открывающая
SELECT, получает дополнительный уровень отступа и закрывается на своей строке.CASEставит каждоеWHENиELSEна строку и выравниваетENDпоCASE. - Операторы разделяются пустой строкой.
Что не меняется никогда
Строки, имена в кавычках ("Заказ", `order`, [Дата заказа]), числа, комментарии и тела функций PostgreSQL в долларовых кавычках копируются ровно так, как записаны. Регистр меняется только у ключевых слов SQL и — прямо перед скобкой — у встроенных функций вроде COUNT( или COALESCE(. Имена ваших таблиц и столбцов, в том числе кириллические, сохраняют написание, как и слова, которые в одних СУБД ключевые, а в других — частые имена столбцов: date, name, status, type, value, timestamp. Имя после точки, как в t.order, всегда считается именем. Ничего не добавляется и не удаляется, кроме пробелов, поэтому отформатированный запрос возвращает те же строки.
Пример
В поле — отчётный запрос в одну строку: комментарий, выражение CASE, условие соединения из двух частей, список IN с городами и предложение HAVING. С настройками по умолчанию он выглядит так:
-- лучшие клиенты за год
SELECT
c.id,
c.name,
COUNT(o.id) AS orders,
SUM(o.total) AS spent,
CASE
WHEN SUM(o.total) > 100000 THEN 'золото'
ELSE 'стандарт'
END AS tier
FROM
customers c
LEFT JOIN orders o ON o.customer_id = c.id
AND o.status <> 'отменён'
WHERE
o.created_at >= '2026-01-01'
AND c.city IN ('Москва', 'Казань')
GROUP BY
c.id,
c.name
HAVING
COUNT(o.id) > 2
ORDER BY
spent DESC
LIMIT 10;
Комментарий остаётся на своей строке, строки «золото», «Москва» и «отменён» сохраняют кавычки, а псевдонимы c, o и spent — свой регистр. Подзапрос и общее табличное выражение выглядят так:
WITH recent AS (
SELECT
customer_id
FROM
orders
WHERE
created_at > NOW() - INTERVAL '30 days'
)
SELECT
name
FROM
customers
WHERE
id IN (
SELECT
customer_id
FROM
recent
)
Диалекты: что меняет выбор
В каждой СУБД SQL пишут немного по-своему, прежде всего — кавычки. Диалект говорит форматеру, как читать текст; переписывать запрос под другую базу он не будет.
| Диалект | Что читается иначе |
|---|---|
| Стандартный SQL | 'текст' с '' для кавычки внутри, "имя", -- комментарий и /* комментарий */ |
| MySQL / MariaDB | "текст" — строка, обратная косая черта экранирует ('It\'s'), `имя`, # комментарий; -- начинает комментарий, только если за ним пробел |
| PostgreSQL | Тела $$ … $$ и $tag$ … $tag$ целиком, строки E'…' с экранированием, вложенные комментарии /* /* */ */, приведение типов ::, параметры $1 |
| SQL Server (T-SQL) | [имя] с ]] внутри, N'текст', @переменные, временные таблицы #temp, вложенные комментарии и GO на отдельной строке как разделитель пакетов |
| Oracle (PL/SQL) | Альтернативные кавычки q'[It's]', переменные привязки :bind |
| SQLite | [имя] и `имя` наряду с "имя"; параметры ?, ?1, :name, @name и $name |
Разница важна: 'It\'s' — законченная строка в MySQL, а в стандартном SQL обратная косая черта — обычный символ, строка заканчивается на второй кавычке, а третья открывает строку, которая никогда не закроется. С неправильным диалектом вы увидите «Строка не закрыта». Для ClickHouse, где строки тоже понимают обратную косую черту, обычно подходит «Стандартный SQL», а если в строках есть \' — MySQL.
Запросы 1С — не SQL
Язык запросов 1С:Предприятия похож на SQL, но использует русские ключевые слова: ВЫБРАТЬ, ИЗ, ГДЕ, КАК. Форматер знает только ключевые слова SQL, поэтому такой запрос он оставит как есть, в одну строку: ВЫБРАТЬ Товары.Наименование ИЗ Справочник.Товары КАК Товары ГДЕ Товары.Цена > 100. Для запросов 1С пользуйтесь конструктором запросов в конфигураторе. А вот SQL, который 1С выполняет на PostgreSQL или SQL Server (например, из технологического журнала), форматируется как обычно.
Какие ошибки он находит
Форматер — не полный парсер SQL и не проверяет, что запрос допустим для вашей базы. Он останавливается только там, где не может понять, где кончается лексема: незакрытая строка, имя в кавычках, комментарий или тело в долларовых кавычках, скобка без пары и типографские кавычки (‘ ’ “ ” « »), вставленные из Word или мессенджера. Для каждой ошибки показываются строка, столбец и место, отмеченное знаком ^.
Ограничения и советы
- Процедурный код — PL/pgSQL, блоки T-SQL
BEGIN … END, пакеты PL/SQL — раскладывается как обычные операторы; тело функции PostgreSQL в$$остаётся ровно таким, как написано. - Длинные списки внутри
IN (…)и длинные вызовы функций остаются в одной строке. - В одну строку сохраняет комментарии
--, поэтому после каждого идёт перенос строки; всё остальное в операторе — в одной строке. - Результаты запроса в JSON или XML можно привести в порядок форматированием JSON и форматированием XML, а JSON-выгрузку превратить в таблицу конвертером JSON в CSV.
SQL остаётся на вашем устройстве
Форматирование выполняется в вашем браузере. Запросы часто раскрывают имена таблиц, данные клиентов в литералах и устройство вашей базы — ничего из этого не загружается на сервер и не записывается в логи. Данные и не сохраняются: после перезагрузки страницы поле очищается.
Частые вопросы
Меняет ли форматирование то, что делает запрос?
Нет. Меняются только пробелы и регистр ключевых слов, а ключевые слова SQL к регистру не чувствительны. Строки, имена в кавычках, числа и комментарии копируются в точности, поэтому запрос возвращает те же строки.
Какой диалект выбрать?
Тот, в котором работает запрос: PostgreSQL, MySQL, SQL Server и т. д. Выбор меняет только чтение кавычек, обратных косых черт и комментариев; если в запросе нет особых форм из таблицы выше, все диалекты дают одинаковый результат.
Почему слова вроде date или name не стали прописными?
Слова date, name, status, type, value и timestamp в одних СУБД — ключевые, а в других — очень частые имена столбцов, поэтому они сохраняют ваше написание. Функции вроде count или date становятся прописными, только если за ними идёт скобка.
Исправит ли он синтаксические ошибки?
Он находит незакрытые строки, комментарии и имена в кавычках, непарные скобки и типографские кавычки и показывает, где они. Другие ошибки — опечатку в ключевом слове или пропущенную запятую — он форматирует как есть, о них сообщит ваша база.
Подходит ли он для запросов 1С?
Нет: язык запросов 1С использует русские ключевые слова (ВЫБРАТЬ, ИЗ, ГДЕ), которых форматер не знает, и оставит такой запрос в одну строку. SQL, который 1С отправляет в PostgreSQL или SQL Server, форматируется как обычно.
Загружается ли мой SQL куда-нибудь?
Нет. Форматер работает как JavaScript в вашем браузере, запросы не покидают устройство, а после загрузки страница работает даже без интернета.
Обновлено: 16 октября 2026 г.