开发者工具

SQL 格式化

从日志、ORM 调试输出或者同事的消息里复制来的 SQL,往往挤成一整行,看不出结构。粘贴进来,本工具按所选数据库的方言把它排成每个子句一行、列表逐项缩进的格式,关键字统一大写或小写,字符串和注释原样保留。

全部在你的浏览器里运行,这里输入的内容不会上传。

怎么用

  1. 选择数据库方言。不同数据库的语法有差别,选对了才能正确识别各自特有的写法。不确定就选 Standard SQL。
  2. 选择关键字用大写、小写还是保持原样,以及缩进宽度。
  3. 把 SQL 粘贴到左侧,右侧实时给出格式化结果。可以一次粘贴多条语句,用分号分隔,结果里每条之间空一行。
  4. 复制结果。如果提示无法解析,检查报出的行列附近是否有没配对的括号或引号,或者换一个方言试试。

格式化做了什么、没做什么

只动空白和关键字

格式化由开源库 sql-formatter 完成:它把 SQL 切成关键字、标识符、字符串、注释等记号,再按子句重新排版。SELECT、FROM、WHERE、GROUP BY 这些子句各占一行,列、条件、排序项逐项缩进,JOIN 跟在表名下面,运算符两边加空格。字符串里的内容一个字符都不会动,所以 'a b -- 不是注释' 这样的字符串保持原样;真正的注释会保留在原来的位置。

关键字大小写不影响表名和列名

「关键字」选项只改 SELECT、FROM 这类保留字,表名、列名、函数里的标识符保持你写的样子。这一点很重要:按 PostgreSQL 文档,不加引号的标识符会被自动转成小写,加了双引号的标识符区分大小写,所以 FOO、foo、"foo" 是同一个名字,而 "Foo" 是另一个。如果格式化工具顺手把标识符的大小写也改了,加引号的名字就会指向别的对象。

为什么要选方言

各数据库都有自己的写法,例如 MySQL 里用反引号括起来的 order、PostgreSQL 的参数 $1 和类型转换 ::int、SQL Server 里用方括号括起来的 [order]。选对方言,这些记号才会被当作一个整体保留;选错了,可能被拆开、插进空格,甚至无法解析。sql-formatter 支持的方言见它的说明文档,本工具提供其中最常用的十几种。

数据留在本地

SQL 里常常有真实的表结构、客户数据甚至连接信息。格式化完全在你的浏览器里进行,不会上传。如果还要贴给 AI 或同事,可以先用本站的脱敏工具把邮箱、手机号和密钥换成占位符。

示例

输入:

select a.id, count(*) as n from users a left join orders o on o.user_id=a.id where a.created_at>='2026-01-01' and o.status in ('paid','shipped') group by a.id having count(*)>2 order by n desc limit 10;

选 MySQL、关键字大写、2 个空格缩进,得到:

SELECT
  a.id,
  count(*) AS n
FROM
  users a
  LEFT JOIN orders o ON o.user_id = a.id
WHERE
  a.created_at >= '2026-01-01'
  AND o.status IN ('paid', 'shipped')
GROUP BY
  a.id
HAVING
  count(*) > 2
ORDER BY
  n DESC
LIMIT
  10;

PostgreSQL 方言下,SELECT $1::int FROM t 中的 $1::int 会被当作一个整体保留,不会在 :: 两边插入空格。

局限

  • 按 sql-formatter 的说明,它不支持存储过程,也不支持把语句分隔符从分号改成别的(例如 MySQL 客户端里的 DELIMITER //)。
  • 格式化只检查能否切分记号和括号是否配对,不检查语义:表不存在、列名写错、语法在目标数据库里不合法,都不会被发现。
  • 只调整排版,不优化查询,也不改变执行计划。
  • 非常长的 SQL(几 MB)在手机上可能要等几秒。

常见问题

格式化会改变 SQL 的意思吗?

不会。只调整空白、换行和关键字大小写,字符串、注释和标识符保持不动。

关键字大写会把表名也改成大写吗?

不会。这很重要:在 PostgreSQL 里加了双引号的名字区分大小写,改了就会指向别的对象。

为什么提示无法解析?

通常是括号或引号没配对,或者用了所选方言不认识的写法。换成正确的方言再试。

支持存储过程吗?

不支持,这是 sql-formatter 的已知限制。

我的 SQL 会上传吗?

不会,格式化在浏览器里完成。

参考资料

↵ 打开 · Esc 关闭