SQL 格式化

自研分词的 SQL 美化工具,主子句换行、关键字大写、注释原样保留

0 字符
0 行
 
选项

关闭后关键字保持原样,不强制改写大小写。

缩进

字符串、单行注释与块注释按原子保留,不会被改写。无法识别的语法尽量保持原样输出。

使用说明

  1. 把 SQL 粘进左侧输入框,结果右侧实时刷新,也可以点「格式化」立即重排。
  2. 需要大写关键字就保持勾选,想保留原样大小写就取消勾选。
  3. 缩进选 2 或 4 空格,主子句换行与嵌套缩进会跟随所选宽度。
  4. 多条语句用分号分隔,格式化后按分号分成多段,段间留空行。
  5. 点复制拿到结果,粘回编辑器或文档即可使用。

格式化口径

哪些子句会换行?
SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、UNION 等主子句各起一行,JOIN 系列单独成行,子查询在括号内整体缩进。
字符串和注释会被改动吗?
不会。单引号字符串、双引号与反引号标识符、单行注释与块注释都按原子切分,内部内容原样保留,其中的关键字与分号也不会被误判。
遇到不认识的语法怎么办?
分词器把不认识的写法当普通符号输出,尽量保持原样不破坏。格式化属于重排不重写,不会校验语法,也不会补全或删除任何标记。
数据会离开浏览器吗?
不会。分词与格式化全部在浏览器本地完成,语句内容不上传。输入与选项保存在本机浏览器里用于恢复,清除站点数据即可删除。

常见问题

关键字大小写开关影响哪些词?
只影响内置关键字表里的词,例如 SELECT、WHERE、JOIN 与常用函数名。表名、列名与别名始终按原样输出,不会被强制改写。
为什么有的逗号换行有的不换?
SELECT 字段列表、GROUP BY 与 ORDER BY 列表里的顶层逗号会断行,函数参数与 IN 列表里的逗号保持原位,避免把简单表达式拆碎。
能格式化存储过程或方言语法吗?
可以尝试,但方言里的块结构不会重排,按普通语句输出。核心的 SELECT、JOIN 与子查询结构支持较好,过程控制语句建议保持原样。
格式化会改变执行结果吗?
不会。工具只调整空白与换行,不增删任何符号。注释与字符串原样保留,语句语义不变,仍建议格式化后抽查一遍再执行。

界面截图

SQL 格式化 · 界面预览
界面预览
SQL 格式化 · 示例结果
示例结果

使用步骤

  1. 粘贴 SQL 语句

    把语句粘进左侧输入框,右侧实时给出格式化结果,也可以点格式化按钮立即重排一遍。

  2. 选大小写与缩进

    关键字大写默认开启,需要保留原样就取消勾选。缩进可选 2 或 4 空格,子查询跟随所选宽度。

  3. 按分号分段

    多条语句用分号分隔,格式化后各占一段,段间留空行,长脚本一眼能看出结构。

  4. 复制结果使用

    点复制拿到整理后的语句,粘回编辑器执行或贴进文档,输出与预览逐字一致。

工具详细介绍

格式化 SQL 的价值在多人协作时最明显。统一的换行与缩进让评审更快,排查慢查询时条件层级一目了然。SQL 是自由格式语言,空白不影响执行,但可读性差距巨大。常见约定包括:主子句各占一行,子查询整体缩进,字段列表的顶层逗号断行,关键字统一大写便于与表名列名区分。这些约定没有官方标准,各团队保持内部一致即可,工具提供的是一套通用基线。

工具的实现分两步。先用自研分词器把语句切成原子,字符串、注释、数字与标识符各自成块,再按子句规则重排。分词保证 'paid;refund' 这类字符串里的分号不会被误判为语句边界,注释里的关键字也不会被大写化。重排只动空白与换行,不增删任何符号,无法识别的语法按原样输出。全部处理在浏览器本地完成,语句内容不上传服务器,输入与选项只保存在本机浏览器里。

原理与背景

分词器对特殊写法有明确口径。单引号字符串里连续两个单引号是转义,双引号与反引号包裹的是标识符,方括号是 T-SQL 风格标识符,这些都切成原子保留原样。注释分两种,双横线到行尾,斜杠星到星斜杠,块注释可以跨行。分号只在不属于字符串与注释时才算语句边界。数字支持小数、科学计数与十六进制。多字符运算符先于单字符匹配,避免把不等于号拆成两个符号。

重排规则保持保守。主子句换行,JOIN 系列单独成行,子查询在括号内缩进,AND 与 OR 在 WHERE、HAVING 与 ON 中断行。CASE 表达式的 WHEN 与 ELSE 各起一行,内联在函数参数里时保持原样。逗号只在字段列表等顶层断行,函数参数不拆。局限方面,存储过程块结构与方言专有语法不做深度重排,按普通符号输出,窗口函数与方言扩展也可能与预期不同。格式化不校验语法,无法发现 SQL 错误,执行前仍需自行确认语句正确。

典型使用场景

  1. 排查慢查询

    从日志里捞出的长 SQL 往往挤成一行,先格式化再看执行计划,WHERE 与 JOIN 的层级一目了然。定位到多余的子查询或漏掉的条件后,改动也更容易向同事解释,评审时少来回几轮。

  2. 整理报表脚本

    报表脚本常由多段查询拼接而成,按分号格式化成段之后,每段职责清楚,复制单段去试跑也方便。注释原样保留,段落用途的说明不会丢,交接给同事时不用重新写一遍解释。

  3. 统一团队风格

    把工具输出的风格定为团队基线:关键字大写、主子句换行、两空格缩进。评审时不再为格式争吵,diff 里只剩真正的逻辑改动,回滚对齐也更容易,新人接手脚本也省一遍整理工夫。

使用技巧

  • 排查慢 SQL 前先格式化一遍,条件层级清楚了再动手加索引或改写。
  • 想保留团队现有风格时,关掉关键字大写,只使用换行与缩进功能。
  • 格式化不校验语法,执行报错时先检查语句本身,再怀疑工具。

注意事项

  • 以为格式化会修语法

    工具只重排空白,不校验语法也不改写逻辑。少写一个逗号、漏掉一个括号,格式化后依旧报错。把格式化当语法检查器用,会耽误排错时间,真正的校验交给执行计划或单元测试。

  • 大写化影响范围误判

    关键字大写只作用于内置关键字表,表名与列名保持原样输出。如果把列名起成 select 这类保留字,输出会被大写化,遇到这种情况给列名加引号或改名,避免歧义。

  • 方言语法硬套规则

    存储过程、窗口函数扩展与各数据库专有写法未必符合通用规则。重排后语义可疑的段落要先回退原样。再人工逐行整理,不要盲信工具输出,改之前留一份原始语句方便对比。

相关工具