SQL格式化

将冗长杂乱的SQL整理为整洁、缩进规范的查询,支持MySQL、PostgreSQL、SQL Server、SQLite、BigQuery等。

100% 在浏览器中运行。粘贴的内容不会被上传或存储。
SQL查询
格式化后的SQL
就绪。

如何使用 SQL 格式化工具

  1. 将一条或多条 SQL 语句粘贴到输入框中。
  2. 选择与您的数据库匹配的方言:标准 SQL、MySQL、PostgreSQL、SQL Server (T-SQL)、SQLite、MariaDB、BigQuery、Snowflake 或 Oracle PL/SQL。
  3. 选择关键字大小写:大写、小写,或保持原样。
  4. 设置缩进大小。
  5. 点击格式化SQL并复制结果。

您的查询在浏览器中格式化,绝不会被上传或存储,因此可以放心粘贴会暴露表名或业务逻辑的生产环境查询。

为什么要格式化 SQL?

SQL 对空白不敏感:数据库运行单行查询与运行整齐缩进的查询完全一样。但人读起来的感受却大不相同。从 ORM 日志、监控工具或慢查询报告中复制的查询通常是一整行长文本,很难看出哪些条件属于哪个连接或子查询。

格式化工具会把每个主要子句(SELECT、FROM、JOIN、WHERE、GROUP BY、ORDER BY)单独放在一行,并对嵌套部分进行一致的缩进。对比一下:

select u.id,u.email,count(o.id) as orders from users u left join orders o on o.user_id=u.id where u.created_at>='2026-01-01' group by u.id,u.email having count(o.id)>5 order by orders desc;
SELECT
  u.id,
  u.email,
  COUNT(o.id) AS orders
FROM
  users u
  LEFT JOIN orders o ON o.user_id = u.id
WHERE
  u.created_at >= '2026-01-01'
GROUP BY
  u.id,
  u.email
HAVING
  COUNT(o.id) > 5
ORDER BY
  orders DESC;

格式化后的版本更便于在拉取请求中审查、更便于调试,并且在日后有人添加列或条件时产生更干净的差异对比。

为什么方言很重要

每种数据库都用自己的语法扩展了标准 SQL。选择正确的方言,有助于格式化工具正确识别关键字、运算符和标识符引号:

方言标识符引号特有语法示例
MySQL / MariaDB`backticks`LIMIT 10、ON DUPLICATE KEY UPDATE
PostgreSQL"double quotes":: 类型转换、RETURNING、ILIKE
SQL Server (T-SQL)[brackets]SELECT TOP 10、@variables
BigQuery`backticks`STRUCT、UNNEST、SELECT * 中的 EXCEPT
Oracle PL/SQL"double quotes"FETCH FIRST 10 ROWS ONLY、BEGIN … END; 代码块

如果某条查询的格式化结果很奇怪,例如运算符被拆开,或关键字被当成了列名,切换到正确的方言通常就能解决。

格式化有助于发现的常见 SQL 错误

格式化工具既不会执行您的查询,也不会对其进行完整验证,但清晰的排版会让许多错误一目了然:

  • select 列表中漏了逗号。SELECT id name FROM users 是合法的 SQL,但它会把 id 以别名 name 返回。每列占一行时,漏掉的逗号就很显眼。
  • 在 WHERE 中对外连接的表进行过滤。LEFT JOIN orders o … WHERE o.status = 'paid' 会悄悄把外连接变成内连接。如果想保留未匹配的行,请把条件移到 ON 子句中。
  • 混用 AND 和 OR 却不加括号。AND 的优先级高于 OR,所以 a OR b AND c 的意思是 a OR (b AND c)。请加上括号,让意图明确。
  • 括号或引号不匹配。当输出的缩进突然错乱时,请检查该位置之前是否有未闭合的括号或字符串字面量。

技巧与最佳实践

  • 关键字大写是一种广泛使用的约定,因为它把 SQL 语法与您的表名和列名区分开来;小写同样有效。每个项目选定一种即可。
  • 在多表查询中始终为表设置别名,并限定列名(用 u.id 而不是 id)。
  • 切勿通过拼接用户输入来构造 SQL。请使用参数化查询或预处理语句来防止 SQL 注入。
  • 把时间戳存成了整数?请用 Unix时间戳转换器查看某个值的含义,并用 UUID生成器生成测试用的主键。
提示:要格式化以 JSON 形式存储的查询结果?请把它粘贴到 JSON格式化与校验中。

常见问题

格式化会改变我的查询的作用吗?

不会。格式化工具只更改空白、换行,以及(如果您这样选择)关键字大小写。标识符、字符串字面量和查询的逻辑都保持不变。

SQL 格式化工具会检查我的查询是否有效吗?

不会完整检查。它会对查询进行词法切分以便排版,所以严重损坏的输入可能产生奇怪的输出,但它不会检查表或列是否存在,也不会检查语句能否运行。这类检查请使用您的数据库或 EXPLAIN。

可以一次格式化多条语句吗?

可以。用分号分隔各条语句,每一条都会依次被格式化。

SQL 关键字应该大写吗?

在所有主流数据库中,SQL 关键字都不区分大小写,所以这纯粹是风格选择。大写是传统做法,在文档中很常见;许多现代团队更喜欢小写。重要的是保持一致。

更新于

已复制到剪贴板