Форматировать SQL-запрос
Расставьте отступы по уровню вложенности, приведите ключевые слова к одному регистру или ужмите запрос в одну строку для логов — поддерживается пятнадцать диалектов.
Перетащите файлы сюда
.sql, .txt · до 10 МБ
Как форматировать SQL
- 1
Перетащите файл .sql
Добавьте файл с запросом. Он читается и перезаписывается прямо в этой вкладке браузера, ничего никуда не отправляется.
- 2
Выберите диалект и стиль регистра
Выберите один из пятнадцати диалектов, отдельно задайте регистр для ключевых слов и идентификаторов, настройте ширину отступа и решите, начинать ли строки с AND и OR или ставить их в конце.
- 3
Скачайте отформатированный запрос
Сохраните результат как файл .sql с именем, составленным по имени исходника.
Токены, а не регулярные выражения
Перед выводом запрос разбивается на строковые литералы, идентификаторы в кавычках, комментарии, числа и слова. В этом разница между форматтером и хитрой заменой по шаблону. Литерал '-- not a comment' остается как есть и не превращается в обрезанную строку, а три пробела внутри 'a b' так и остаются тремя пробелами, потому что внутри литерала каждый символ — это данные, по которым база будет сравнивать.
Он раскладывает запросы, а не проверяет их
Распознавание ключевых слов строится на общем словаре с добавками для каждого диалекта, а не на пятнадцати полных грамматиках. Поэтому инструмент расставляет отступы и переносы строк, а не говорит, валиден ли оператор. Решение по-прежнему за вашей базой данных. Незакрытая скобка или кавычка тоже не блокирует результат: вы получаете предупреждение с номером строки и все равно видите отформатированный вывод, потому что пропущенная скобка чаще всего и есть причина, по которой вы пришли сюда.
Минификация под конфиги и логи
Минификация укладывает оператор в одну строку — для значения в конфиге, записи в логе или строковой константы в приложении. Пробелы схлопываются только вне литералов, а один пробел между соседними словами всегда сохраняется, чтобы ничего не слиплось.
Ваш запрос остается на вашем компьютере
Чтение файла, разбиение его на токены и вывод результата происходят прямо в этой вкладке браузера. Ничего не загружается и не сохраняется, что особенно важно для запроса с именами таблиц, деталями схемы или захардкоженным значением, которое вы не хотите вставлять в чужую веб-форму.
Частые вопросы
Какие диалекты SQL поддерживаются?
Пятнадцать: стандартный SQL, MySQL, MariaDB, PostgreSQL, DB2, PL/SQL, N1QL, Redshift, Spark, SQLite, T-SQL, BigQuery, Snowflake, Trino и SingleStoreDB. От выбранного диалекта зависит, какие слова считаются ключевыми и где ставятся переносы строк.
Покажет ли инструмент, что в запросе есть ошибка?
Нет и не обещает этого. Список ключевых слов — это общий набор плюс дополнения для диалектов, а не полная грамматика для каждого движка, поэтому инструмент только расставляет отступы и переносы в том, что вы ему дали, не оценивая корректность. Даже для незнакомого запроса форматирование помогает: неверно поставленные части становятся заметны, когда видна структура вложенности.
Что значит предупреждение о несбалансированных скобках?
Счетчик круглых скобок и кавычек показал, что пары не сошлись. Вы видите номер строки, где впервые возникло несоответствие, и при этом получаете отформатированный запрос. Считайте разметку лучшим, что можно сделать с такими данными: обычно она и показывает, где потерялась скобка.
Чем минификация отличается от форматирования?
Форматирование раскладывает оператор на строки с отступами по уровню вложенности, чтобы его было удобно читать и разбирать. Минификация делает противоположное — схлопывает все в одну строку, чтобы запрос поместился в конфиг, строку лога или строковую константу.
Сохраняются ли комментарии?
По умолчанию да, и однострочные с двумя дефисами, и блочные. Они переезжают на подходящее место в новой разметке. Можно включить отдельный переключатель, который их удаляет, и он тоже работает по токенам, поэтому литерал, который только выглядит как комментарий, остается нетронутым.
Можно ли отформатировать несколько операторов сразу?
Да. Операторы, разделенные точкой с запятой, форматируются по очереди, а вы задаете, сколько пустых строк будет между ними — от нуля до пяти. Количество найденных операторов выводится вместе с результатом.
Почему запрос с глубокой вложенностью был отклонен?
После двадцати уровней вложенных круглых скобок результат все равно перестает быть читаемым, и такая глубина почти всегда означает, что одна из скобок так и не закрылась. Вместо того чтобы выводить нечитабельную лестницу, инструмент прямо говорит об этом.
Есть ли ограничение по размеру и что-нибудь загружается?
До пяти миллионов символов на запрос — это намного больше любого запроса, написанного от руки. Ничего не загружается ни при каком размере: все работает локально в вашем браузере, без сервера и без аккаунта.