在线SQL 格式化工具

把挤在一行的 SQL 按子句拆开缩进、关键字大小写统一、支持 MySQL、PostgreSQL、SQL Server、Oracle 六种方言

只重排空白和关键字大小写,输出的语句和粘进去的语义完全一致。字符串字面量、被引号包住的标识符、注释正文一律不动。不联网,全部在浏览器里完成。

关于SQL 格式化

把挤成一行的 SQL 按子句拆开:SELECT / FROM / WHERE / GROUP BY 各自成行,子句内部按层缩进,关键字统一大小写。粘进去、点一下,下面是能直接贴回编辑器或工单的版本。

真正的用处是让 diff 变干净。 一段压成一行的 SQL,改一个条件在 diff 里显示成「整行删掉、整行新增」,评审的人看不出你究竟动了什么。格式化之后,没变的子句保持原样,改动只落在真正变化的那一行——评审成本从「重读整段」变成「看一行」。所以格式化不是为了好看,是为了让改动可见。

必须手选方言,这是它和「通用美化器」的区别。 SQL 没有唯一标准:MySQL 用反引号和 LIMIT n,SQL Server 用 TOP n 和方括号 [name],Oracle 是 ROWNUM 加整个 BEGIN ... END; 的 PL/SQL 块,PostgreSQL 有 ::type 强转和 RETURNING。选错方言通常不会报错,但会把 LIMIT 当成普通标识符、把 PL/SQL 里的 / 断开——看着更整齐,贴回去却跑不了。

只动排版,不动内容。 字符串字面量('it''s'、"a b")、被引号包住的标识符、注释正文一律原样搬运;不重命名字段、不补全关键字、不展开 SELECT *、不改写执行计划。它也不是语法检查器:语法错的 SQL 照样能格式化,只是排版可能不理想。

关键字大写只是分工。 大写让关键字和表名、字段名在扫读时分层,一眼能分出语句骨架和数据。团队统一成一种就行,全大写或全小写都对。

几十万行的 mysqldump 不适合丢进来:浏览器要整段解析,超过 2 MB 会直接拒绝。那种量级用命令行的 pg_format 或 sql-formatter。

常见问题

格式化会改变执行结果吗?

不会。改的只有空白、换行和关键字大小写,字符串、标识符、注释内容都原样保留,执行计划也不会因为排版变化。

为什么必须先选方言?

关键字和语法各家不同。MySQL 的 LIMIT、SQL Server 的 TOP、Oracle 的 ROWNUM 在别的方言里会被当成普通单词处理,换行和缩进就错位了;PL/SQL 的块结构还会被斜杠断开。

SQL 有语法错误也能格式化吗?

能。它按词法和常见子句结构排版,不校验语法,所以语法错的语句也会输出,只是缩进可能不理想——不要用它判断 SQL 写得对不对。

注释会被删掉吗?

不会。行注释 -- 和块注释 / / 都原样保留,位置会跟着所在子句移动。

会上传我的 SQL 吗?

不会。格式化库在本页加载,全部在浏览器里完成,服务器不接触你的语句。

为什么 CASE WHEN 没排成整齐的列?

它只按语法层级缩进,不做列对齐。按列对齐要先算出最长表达式的宽度,长语句改一个字段整块都会重排,diff 反而更脏。

同类工具

编码解码 查看全部 ›