Читабельний SQL вашим діалектом
Цей SQL форматер приймає запит будь-якої довжини, навіть кілька інструкцій одразу, і однаково розставляє відступи: одне речення на рядок, стовпці й умови вирівняні, ключові слова в потрібному вам регістрі. Він розуміє синтаксис понад п'ятнадцяти діалектів, від PostgreSQL, MySQL і SQL Server до BigQuery, Snowflake і Oracle PL/SQL, тож оператори, лапки та плейсхолдери кожного діалекту зберігаються. Перемкніться на «Стиснути», щоб знову зібрати запит в один рядок для конфігураційного файлу чи рядка в коді. Усе працює у вашому браузері; запити нікуди не завантажуються.
Як відформатувати SQL-запит
- 1Вставте SQL у ліву панель або почніть із прикладу запиту.
- 2Виберіть діалект, яким написано запит. Standard SQL підходить для більшості простих запитів; правильний діалект важливий для таких речей, як приведення
::у PostgreSQL, ідентифікатори у зворотних лапках у MySQL чи[brackets]у SQL Server. - 3Задайте регістр ключових слів і відступи, а в розділі Додаткові параметри — регістр типів даних і функцій, табличні відступи, положення
AND/ORі порожні рядки між інструкціями. - 4Відформатований запит з'являється праворуч під час введення. Якщо запит не вдається розібрати, показуються рядок і стовпець із помилкою.
- 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-запит в один рядок?
- Виберіть «Стиснути» вгорі інструмента. Коментарі видаляються, пробіли зводяться, а рядкові літерали й ідентифікатори в лапках залишаються точно такими, як написані.