SQL 格式化
自研分词的 SQL 美化工具,主子句换行、关键字大写、注释原样保留
使用说明
- 把 SQL 粘进左侧输入框,结果右侧实时刷新,也可以点「格式化」立即重排。
- 需要大写关键字就保持勾选,想保留原样大小写就取消勾选。
- 缩进选 2 或 4 空格,主子句换行与嵌套缩进会跟随所选宽度。
- 多条语句用分号分隔,格式化后按分号分成多段,段间留空行。
- 点复制拿到结果,粘回编辑器或文档即可使用。
格式化口径
哪些子句会换行?
字符串和注释会被改动吗?
遇到不认识的语法怎么办?
数据会离开浏览器吗?
常见问题
关键字大小写开关影响哪些词?
为什么有的逗号换行有的不换?
能格式化存储过程或方言语法吗?
格式化会改变执行结果吗?
界面截图


使用步骤
- 粘贴 SQL 语句
把语句粘进左侧输入框,右侧实时给出格式化结果,也可以点格式化按钮立即重排一遍。
- 选大小写与缩进
关键字大写默认开启,需要保留原样就取消勾选。缩进可选 2 或 4 空格,子查询跟随所选宽度。
- 按分号分段
多条语句用分号分隔,格式化后各占一段,段间留空行,长脚本一眼能看出结构。
- 复制结果使用
点复制拿到整理后的语句,粘回编辑器执行或贴进文档,输出与预览逐字一致。
工具详细介绍
格式化 SQL 的价值在多人协作时最明显。统一的换行与缩进让评审更快,排查慢查询时条件层级一目了然。SQL 是自由格式语言,空白不影响执行,但可读性差距巨大。常见约定包括:主子句各占一行,子查询整体缩进,字段列表的顶层逗号断行,关键字统一大写便于与表名列名区分。这些约定没有官方标准,各团队保持内部一致即可,工具提供的是一套通用基线。
工具的实现分两步。先用自研分词器把语句切成原子,字符串、注释、数字与标识符各自成块,再按子句规则重排。分词保证 'paid;refund' 这类字符串里的分号不会被误判为语句边界,注释里的关键字也不会被大写化。重排只动空白与换行,不增删任何符号,无法识别的语法按原样输出。全部处理在浏览器本地完成,语句内容不上传服务器,输入与选项只保存在本机浏览器里。
原理与背景
分词器对特殊写法有明确口径。单引号字符串里连续两个单引号是转义,双引号与反引号包裹的是标识符,方括号是 T-SQL 风格标识符,这些都切成原子保留原样。注释分两种,双横线到行尾,斜杠星到星斜杠,块注释可以跨行。分号只在不属于字符串与注释时才算语句边界。数字支持小数、科学计数与十六进制。多字符运算符先于单字符匹配,避免把不等于号拆成两个符号。
重排规则保持保守。主子句换行,JOIN 系列单独成行,子查询在括号内缩进,AND 与 OR 在 WHERE、HAVING 与 ON 中断行。CASE 表达式的 WHEN 与 ELSE 各起一行,内联在函数参数里时保持原样。逗号只在字段列表等顶层断行,函数参数不拆。局限方面,存储过程块结构与方言专有语法不做深度重排,按普通符号输出,窗口函数与方言扩展也可能与预期不同。格式化不校验语法,无法发现 SQL 错误,执行前仍需自行确认语句正确。
典型使用场景
- 排查慢查询
从日志里捞出的长 SQL 往往挤成一行,先格式化再看执行计划,WHERE 与 JOIN 的层级一目了然。定位到多余的子查询或漏掉的条件后,改动也更容易向同事解释,评审时少来回几轮。
- 整理报表脚本
报表脚本常由多段查询拼接而成,按分号格式化成段之后,每段职责清楚,复制单段去试跑也方便。注释原样保留,段落用途的说明不会丢,交接给同事时不用重新写一遍解释。
- 统一团队风格
把工具输出的风格定为团队基线:关键字大写、主子句换行、两空格缩进。评审时不再为格式争吵,diff 里只剩真正的逻辑改动,回滚对齐也更容易,新人接手脚本也省一遍整理工夫。
使用技巧
- 排查慢 SQL 前先格式化一遍,条件层级清楚了再动手加索引或改写。
- 想保留团队现有风格时,关掉关键字大写,只使用换行与缩进功能。
- 格式化不校验语法,执行报错时先检查语句本身,再怀疑工具。
注意事项
- 以为格式化会修语法
工具只重排空白,不校验语法也不改写逻辑。少写一个逗号、漏掉一个括号,格式化后依旧报错。把格式化当语法检查器用,会耽误排错时间,真正的校验交给执行计划或单元测试。
- 大写化影响范围误判
关键字大写只作用于内置关键字表,表名与列名保持原样输出。如果把列名起成 select 这类保留字,输出会被大写化,遇到这种情况给列名加引号或改名,避免歧义。
- 方言语法硬套规则
存储过程、窗口函数扩展与各数据库专有写法未必符合通用规则。重排后语义可疑的段落要先回退原样。再人工逐行整理,不要盲信工具输出,改之前留一份原始语句方便对比。