SQL Formatter:格式化和美化 SQL
SQL Formatter:美化 MySQL、PostgreSQL、SQL Server、SQLite 等的查询。关键字大小写、缩进和压缩。免费。
什么是 SQL Formatter?
SQL Formatter 是一个基于浏览器的工具,可将未格式化、压缩或样式不一致的 SQL 查询转换为具有正确缩进和一致关键字大小写的干净、可读代码。开发者和数据分析师经常遇到格式不好的 SQL——应用程序代码中内联编写的查询、ORM 调试日志的输出、从文档中复制的 SQL,或经过逐步编辑而失去结构的查询。
该工具获取这些原始 SQL,使用 sql-formatter 库应用方言感知的格式化,该库理解 Standard SQL、MySQL、MariaDB、PostgreSQL、PL/SQL(Oracle)、T-SQL(SQL Server)和 SQLite 的语法规则。您可以选择目标方言、设置缩进宽度、切换关键字大写,并压缩结果。所有处理均在浏览器中本地运行,无需服务器、无需注册、完全免费。
主要功能
- 使用正确缩进格式化 SQL — 使用
sql-formatter库,在单次粘贴中对多条语句之间使用可配置的tabWidth和linesBetweenQueries: 2间距。 - 支持多种 SQL 方言 — 从 Standard SQL、MySQL、MariaDB、PostgreSQL、PL/SQL(Oracle)、T-SQL(SQL Server)和 SQLite 中选择。方言选择影响格式化程序如何处理方言特定语法和保留字。
- 可自定义缩进设置 — 从操作栏中选择 2 个或 4 个空格缩进。
- 关键字大写切换 — 按钮在
keywordCase: 'upper'和keywordCase: 'preserve'之间切换。当大写激活时(默认),所有 SQL 关键字标准化为大写(SELECT、FROM、WHERE、JOIN等)。禁用时,关键字大小写保持不变。 - 压缩 SQL — 使用
tabWidth: 0格式化并将结果折叠为令牌之间带单个空格的单行。 - 将格式化输出复制到剪贴板 — Clipboard API,带 textarea 备用方案。
- 下载为 .sql 文件 — 以
text/sqlMIME 类型将输出保存为formatted.sql。 - 键盘快捷键 — Ctrl+Enter(Cmd+Enter)格式化;Ctrl+Shift+M(Cmd+Shift+M)压缩。
如何使用 SQL Formatter
第 1 步:粘贴 SQL
在 /developer/code/sql-formatter 打开工具。将您的 SQL 查询粘贴到左侧的输入面板中。支持用分号分隔的多条语句——格式化程序在输出中的每条语句之间放置两个空行。
第 2 步:选择方言和选项
在面板下方的操作栏中:
- 选择方言 从下拉菜单:Standard SQL、MySQL、MariaDB、PostgreSQL、PL/SQL(Oracle)、T-SQL(SQL Server)或 SQLite。将其与运行查询的数据库引擎匹配,以获得最准确的格式化。
- 选择缩进:2 或 4 个空格。
- 切换 Uppercase:Uppercase 按钮默认处于激活状态。激活时,所有 SQL 关键字规范化为大写。点击禁用可保留原始大小写。
第 3 步:点击 Format
点击 Format 或按 Ctrl+Enter / Cmd+Enter。格式化后的 SQL 显示在只读输出面板中。工具在历史记录条目中显示方言(例如"Formatted POSTGRESQL (2.4 KB)")。
输入示例——来自应用程序调试输出的内联查询:
select u.id,u.email,u.created_at,count(o.id) as order_count,sum(o.total_amount) as total_spent from users u left join orders o on u.id=o.user_id where u.active=true and u.created_at>='2024-01-01' group by u.id,u.email,u.created_at having count(o.id)>0 order by total_spent desc limit 25
使用 PostgreSQL 方言、2 个空格缩进、uppercase 开启的输出:
SELECT
u.id,
u.email,
u.created_at,
COUNT(o.id) AS order_count,
SUM(o.total_amount) AS total_spent
FROM
users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE
u.active = TRUE
AND u.created_at >= '2024-01-01'
GROUP BY
u.id,
u.email,
u.created_at
HAVING
COUNT(o.id) > 0
ORDER BY
total_spent DESC
LIMIT
25
第 4 步:压缩(可选)
点击 Minify 或按 Ctrl+Shift+M / Cmd+Shift+M 生成单行 SQL 字符串。压缩期间大写和方言设置仍然适用。压缩后的 SQL 适用于将查询嵌入环境变量、配置字符串或行更改会产生噪音的比较差异文件。
同一查询的压缩输出:
SELECT u.id, u.email, u.created_at, COUNT(o.id) AS order_count, SUM(o.total_amount) AS total_spent FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE u.active = TRUE AND u.created_at >= '2024-01-01' GROUP BY u.id, u.email, u.created_at HAVING COUNT(o.id) > 0 ORDER BY total_spent DESC LIMIT 25
第 5 步:复制或下载
点击 Copy 将输出放入剪贴板。点击 Download 保存 formatted.sql。两个按钮在右侧面板有输出之前均处于禁用状态。
实际示例
清理 ORM 调试查询
Django 或 Rails 的 ORM 调试输出以混合大小写将查询记录在单行上。典型的 Django 查询日志条目:
select "products"."id", "products"."name", "products"."price", "products"."stock_count" from "products" where "products"."category_id" = 12 and "products"."active" = true order by "products"."name" asc
选择 PostgreSQL 方言(Django 使用带双引号的 PostgreSQL 引用风格),启用大写,然后点击 Format。输出显示正确的缩进和大写关键字,同时保留双引号括起的标识符。
审查存储过程
一个 T-SQL 存储过程作为单个未格式化块签入了版本控制。选择 T-SQL(SQL Server)方言并点击 Format,获得具有一致关键字大小写的缩进、可读版本。格式化版本在 pull request 差异中更容易审查,可以提交回去替换原始版本。
在配置中嵌入查询
您的应用程序将报告查询作为单行字符串存储在 YAML 配置文件中。在 SQL Formatter 中使用正确格式构建和测试查询,然后点击 Minify 生成用于嵌入的紧凑版本。在压缩版本旁边的注释中保留格式化版本可使配置文件易于维护。
# 格式化版本(用于可读性):
# SELECT product_id, SUM(quantity) AS units_sold
# FROM order_items
# WHERE order_date >= :start_date
# GROUP BY product_id
# ORDER BY units_sold DESC
report_query: "SELECT product_id, SUM(quantity) AS units_sold FROM order_items WHERE order_date >= :start_date GROUP BY product_id ORDER BY units_sold DESC"
提示和最佳实践
将方言与您的数据库匹配。 虽然大多数 SQL 格式化与方言无关,但 sql-formatter 库在选择正确方言时可以更准确地处理方言特定语法(如 PostgreSQL 中的 :: 强制转换语法、T-SQL 中的 TOP,以及 LIMIT/OFFSET 放置差异)。
使用大写提高代码审查可读性。 大写关键字的 SQL 惯例被广泛认可,使结构性组件(SELECT、FROM、WHERE、JOIN)与标识符和字面量在视觉上区分开来。在格式化将要被审查或提交的代码之前启用大写切换。
比较前先格式化。 比较查询的两个版本时,先用相同设置格式化两者。未格式化 SQL 的差异会产生嘈杂的输出,因为单个结构更改可能影响许多行。格式化 SQL 的差异只显示有意义的更改。
多条语句可以正常工作。 您可以粘贴包含多个 CREATE TABLE、INSERT 和 ALTER TABLE 语句(以分号分隔)的迁移文件或脚本。格式化程序在每条语句之间生成两个空行以进行视觉分隔。
为团队惯例保存预设。 Glyph Widgets 支持者可以将方言、缩进和大写设置保存为命名预设。为每个项目创建一个预设(如"MySQL 2 个空格大写"),在项目间切换时一键应用团队惯例。
常见问题和故障排除
点击 Format 后出现错误消息 — sql-formatter 库在无法识别的语法上抛出错误。常见原因:所选方言不支持的专有扩展、过程代码(PL/pgSQL 函数体、T-SQL BEGIN/END 块)或与应用层模板语法(如 {{ variable }} 或 #{variable})混合的 SQL。格式化前删除或注释掉不支持的部分。
关键字未被大写 — 确认 Uppercase 按钮处于激活状态(填充、主要样式)。如果按钮处于轮廓样式,大小写设置为 preserve。点击一次启用大写模式。
错误的方言导致意外换行 — sql-formatter 库的换行规则因方言而异。如果查询格式奇怪,请尝试将 Standard SQL 作为方言。
压缩输出某些地方仍有多个空格 — 压缩方法将所有空白序列折叠为单个空格。引号字符串内容不受影响——单引号字符串内的空格会被保留。
"Please enter SQL to format" 错误 — 输入为空。点击 Format 前将 SQL 查询粘贴到左侧面板。
下载的文件每次都命名为 formatted.sql — 这是固定文件名。下载后重命名文件以符合项目的命名规范。
隐私和安全
SQL Formatter 使用 sql-formatter 库在浏览器中本地处理所有 SQL 文本。没有任何查询文本——包括表名、列名、数据值、连接字符串中的凭据或任何其他内容——会发送到服务器。页面加载后,工具可离线工作。这使其可安全用于包含专有架构名称、内部业务逻辑或示例数据的查询。
常见问题解答
SQL Formatter 是免费的吗? 是的,完全免费。所有格式化、压缩和方言选项均无需付费或创建账户即可使用。Glyph Widgets 支持者功能(如已保存的预设和会话历史)适用于 Ko-fi 支持者,但核心 SQL 格式化不受限制。
可以离线工作吗? 可以。页面加载后,所有格式化使用 JavaScript 在浏览器中本地运行。您可以断开互联网连接,继续格式化查询而不中断。
我的 SQL 安全吗? 是的。您的 SQL 永远不会传输到任何服务器。它完全在浏览器内存中处理,当您清除工具或关闭标签页时被丢弃。您可以安全地粘贴包含内部表名、业务逻辑或示例数据值的查询。
支持哪些 SQL 方言? 该工具支持 Standard SQL、MySQL、MariaDB、PostgreSQL、PL/SQL(Oracle)、T-SQL(SQL Server)和 SQLite。这些直接对应 sql-formatter 库的 language 参数。
该工具是否验证 SQL 语法? sql-formatter 库执行足够的解析来格式化 SQL,并会在某些无法处理的语法上抛出错误,但它不是严格意义上的 SQL 验证器。对于真正的语法验证,请使用数据库引擎的 EXPLAIN 或查询规划器。
可以一次格式化多个查询吗? 可以。粘贴多条以分号分隔的语句。格式化程序在每条格式化语句之间放置两个空行,使查询之间的边界清晰可见。
Uppercase 切换具体做什么? 启用时,格式化程序在 sql-formatter 选项中设置 keywordCase: 'upper',将所有 SQL 保留字转换为大写——SELECT、FROM、WHERE、JOIN、ON、GROUP BY、ORDER BY、LIMIT、函数名如 COUNT、SUM、MAX 等。禁用时,keywordCase: 'preserve' 保留输入中的任何大小写不变。
格式化程序处理 CTE(Common Table Expressions)吗? 是的。CTE(WITH ... AS (...))会正确格式化,CTE 定义和其后的主查询都有适当的缩进。这适用于所有支持的方言。
格式化的键盘快捷键是什么? Windows/Linux 上是 Ctrl+Enter,macOS 上是 Cmd+Enter。压缩请使用 Windows/Linux 上的 Ctrl+Shift+M 或 macOS 上的 Cmd+Shift+M。
可以格式化像 CREATE TABLE 这样的 DDL 语句吗? 可以。sql-formatter 库处理 DDL(CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE INDEX 等)以及 DML(SELECT、INSERT、UPDATE、DELETE)和 DCL(GRANT、REVOKE)。包含 DDL 和 DML 的混合脚本在用分号分隔时可以正确格式化。
相关工具
JSON Formatter — 使用架构验证、架构生成和交互式树视图器格式化和验证 JSON 数据。
XML Formatter — 使用可配置缩进和压缩格式化和验证 XML 文档。
YAML Formatter — 格式化 YAML 配置文件并将其转换为 JSON。
立即试用 SQL Formatter:SQL Formatter