Форматтер SQL

Вставьте однострочный SQL-оператор, скопированный из лога или ORM, и форматтер разобьет его на отступленные клаузы с единообразным регистром ключевых слов, переносами строк перед SELECT, FROM, WHERE, GROUP BY и выровненными столбцами в проекции. Поддерживает диалекты MySQL, PostgreSQL, SQL Server, Oracle, SQLite и BigQuery, у каждого слегка различающиеся ключевые и зарезервированные слова.

Как работает форматирование

  1. 1

    Вставьте ваш SQL

    Однострочный блок, минифицированный вывод из Hibernate, что угодно. Несколько операторов, разделенных `;`, форматируются все.

  2. 2

    Выберите диалект и стиль

    Диалект управляет списком ключевых слов; стиль управляет расположением запятых (ведущие или хвостовые), шириной отступа и регистром ключевых слов.

  3. 3

    Токены разбираются, а не заменяются регулярками

    Токенизатор корректно обрабатывает строки, комментарии, скобки и подзапросы. Строковые литералы сохраняются дословно.

  4. 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 выглядят похоже, но имеют диалект-специфичные ключевые слова, которые обычные форматтеры портят. Используйте с осторожностью и проверяйте, что вывод выполняется.

Сопутствующие инструменты

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Генератор случайных букв

Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.

Конвертер размера файлов

Преобразуйте значения между байтами, КБ, МБ, ГБ, ТБ и двоичными единицами IEC (KiB, MiB, GiB, TiB), свободно сочетая десятичные и двоичные единицы.

Инструмент доступен на других языках