Pack Camo

SQL форматер і б'ютифаєр

Відступи й охайне оформлення SQL для PostgreSQL, MySQL, SQLite, SQL Server та інших.

Усе виконується локально — нічого не надсилається на сервер.

SQL

7 рядків · 442 символи

Відформатований SQL

Форматування…

Читабельний SQL вашим діалектом

Цей SQL форматер приймає запит будь-якої довжини, навіть кілька інструкцій одразу, і однаково розставляє відступи: одне речення на рядок, стовпці й умови вирівняні, ключові слова в потрібному вам регістрі. Він розуміє синтаксис понад п'ятнадцяти діалектів, від PostgreSQL, MySQL і SQL Server до BigQuery, Snowflake і Oracle PL/SQL, тож оператори, лапки та плейсхолдери кожного діалекту зберігаються. Перемкніться на «Стиснути», щоб знову зібрати запит в один рядок для конфігураційного файлу чи рядка в коді. Усе працює у вашому браузері; запити нікуди не завантажуються.

Як відформатувати SQL-запит

  1. 1Вставте SQL у ліву панель або почніть із прикладу запиту.
  2. 2Виберіть діалект, яким написано запит. Standard SQL підходить для більшості простих запитів; правильний діалект важливий для таких речей, як приведення :: у PostgreSQL, ідентифікатори у зворотних лапках у MySQL чи [brackets] у SQL Server.
  3. 3Задайте регістр ключових слів і відступи, а в розділі Додаткові параметри — регістр типів даних і функцій, табличні відступи, положення AND/OR і порожні рядки між інструкціями.
  4. 4Відформатований запит з'являється праворуч під час введення. Якщо запит не вдається розібрати, показуються рядок і стовпець із помилкою.
  5. 5Скопіюйте результат, завантажте його як файл .sql або виберіть Стиснути, щоб згорнути його в один рядок.

Навіщо форматувати SQL?

SQL пишуть один раз, а читають багато разів: на code review, у журналі повільних запитів, у міграції, яку комусь доведеться налагоджувати о 2 ночі. Запит, згенерований ORM або скопійований із журналу, зазвичай приходить одним величезним рядком. Коли кожне речення стоїть на своєму рядку, а підзапити мають відступ, структура стає видимою: які таблиці з'єднуються, за чим і які умови де діють.

Однакове форматування також зменшує диффи. Коли вся команда форматує запити однаково, змінена умова видна як один змінений рядок, а не перебудований абзац.

Параметри форматування

Регістр ключових слів
UPPER виділяє SELECT, FROM і WHERE на тлі імен таблиць і стовпців — найпоширеніша домовленість. lower підійде командам, яким великі літери здаються галасливими. «Як є» залишає ключові слова так, як ви їх набрали.
Відступи
Два або чотири пробіли чи табуляція. Табличні стилі натомість доповнюють ключові слова до стовпця фіксованої ширини, щоб вирази після них були вирівняні.
Положення AND / OR
«На початку рядка» ставить кожен логічний оператор на початок рядка, тож одну умову легко закоментувати; «у кінці рядка» залишає його в кінці попереднього рядка.
Ширина виразу
Вирази в дужках, коротші за цю кількість символів, залишаються на одному рядку; довші розбиваються.
Щільні оператори
Пише a+b замість a + b. Компактно, але читається гірше.

Як вибрати діалект

Діалекти SQL відрізняються сильніше, ніж здається: як беруться в лапки ідентифікатори ("name", `name` або [name]), який вигляд має плейсхолдер (?, $1, :name, @param) і які слова зарезервовані. Форматер використовує окрему граматику для кожного діалекту, тому не сплутає тіло функції $$ у PostgreSQL чи коментар # у MySQL з чимось іншим.

Якщо ви бачите помилку розбору для запиту, який точно коректний, спершу перевірте діалект. Standard SQL навмисно суворий і знає не всі розширення виробників.

Стиснення SQL

Стиснення — протилежність форматування: коментарі видаляються, а всі пробільні символи зводяться до одиночних пробілів, і виходить один рядок, який можна вставити у YAML-файл, змінну середовища чи рядковий літерал. Рядкові літерали, ідентифікатори в лапках і тіла в доларових лапках копіюються без змін, тож значення на кшталт 'two spaces' зберігає обидва пробіли. Підказки оптимізатора виду /*+ … */ і виконувані коментарі MySQL /*! … */ зберігаються, бо впливають на виконання запиту.

Працюєте з JSON? JSON Formatter робить те саме для JSON-документів, а мініфікатор коду обробляє CSS, JavaScript і HTML.

Поширені запитання

Чи надсилається мій SQL на сервер?
Ні. Форматування та стиснення повністю виконуються у вашому браузері, тож запити з іменами таблиць, даними клієнтів чи обліковими даними не залишають ваш пристрій.
Які діалекти SQL підтримуються?
Standard SQL, PostgreSQL, MySQL, MariaDB, SQLite, SQL Server (T-SQL), Oracle PL/SQL, BigQuery, Snowflake, Amazon Redshift, Spark SQL, Hive, Trino і Presto, DuckDB, ClickHouse, IBM Db2 і Db2 for IBM i, SingleStoreDB, TiDB та Couchbase N1QL.
Чи змінює форматування те, що робить запит?
Ні. Змінюються лише пробіли та, якщо ви оберете, регістр ключових слів, типів даних і функцій. Ідентифікатори в лапках і рядкові літерали ніколи не змінюються. Змінювати регістр ідентифікаторів без лапок безпечно в більшості СУБД, але залиште «Як є», якщо ваша база даних чутлива до їхнього регістру.
Чому виникає помилка розбору?
Або в запиті є синтаксична помилка, наприклад незакрита дужка чи лапка, або він використовує синтаксис, якого немає у вибраному діалекті. У повідомленні вказано рядок і стовпець, де зупинився розбір; спробуйте діалект, який справді використовує ваша СУБД.
Чи можна відформатувати кілька інструкцій одразу?
Так. Розділіть їх крапкою з комою — кожну буде відформатовано по черзі, з вибраною вами кількістю порожніх рядків між ними.
Чи зберігаються коментарі?
Під час форматування — так: рядкові та блокові коментарі залишаються на місці. Стиснення видаляє їх, окрім підказок оптимізатора та виконуваних коментарів MySQL.
Як стиснути SQL-запит в один рядок?
Виберіть «Стиснути» вгорі інструмента. Коментарі видаляються, пробіли зводяться, а рядкові літерали й ідентифікатори в лапках залишаються точно такими, як написані.