DevToolbox
跳到主内容

SQL 格式化

子句换行缩进、关键字大小写,字符串与注释不动

SQL 输入
支持字符串、注释与多词关键字;只调整空白与关键字大小写,不改写内容
0 字符
格式化结果
格式化结果会显示在这里

方言说明

格式化只调整空白与关键字大小写,不改写字符串和注释的内容

通用关键字大小写、换行缩进都不影响执行结果,可以放心格式化。
MySQL反引号 ` 包裹的标识符与 # 行注释会被正确识别,不会被改写。
PostgreSQL支持 :: 转型、-> / ->> JSON 取值与 $$ 字符串(视为普通单词处理)。
SQL Server[方括号] 标识符会被识别为整体,内部内容不会被改动。

关于SQL 格式化

格式化 SQL 的价值不只是好看:把每个子句拆到独立一行之后,多表 JOIN 的关联条件、WHERE 里层层叠加的 AND 与括号、SELECT 列表里漏掉或多出的逗号都会变得一目了然。本工具按子句关键字(SELECT / FROM / JOIN / WHERE / GROUP BY / HAVING / ORDER BY / LIMIT 等)断行,逗号后另起一行,子查询再缩进一层,右括号与它的左括号对齐。

最容易被格式化工具搞坏的是字符串与注释里的内容——一句 WHERE note = 'select a,b from t' 如果被当成 SQL 改写,结果就是语义完全错误的语句。本工具先做完整分词,字符串、反引号标识符、方括号标识符、-- 与 # 行注释、/* */ 块注释都作为整体保留,关键字大小写只作用于未加引号的单词。压缩模式同样基于 token 而不是正则,因此减号不会被贴成注释、字符串里的逗号也不会被吞掉。

常见问题

格式化会改变 SQL 的语义吗?

不会。空白与换行在 SQL 里不是语法的一部分(字符串内部除外),关键字大小写也不影响执行。本工具只调整这些内容,并且字符串、注释、引号标识符一律原样保留,可以放心对生产语句使用。

为什么 GROUP BY 没有被拆成两行?

因为它是一个多词关键字。本工具内置了 GROUP BY、ORDER BY、LEFT OUTER JOIN、INSERT INTO、ON CONFLICT 等多词关键字的匹配表,会整体识别、整体换行与转换大小写。如果你遇到被拆开的情况,那通常是写法里混入了多余的换行或注释,可以反馈具体语句。

支持哪些数据库方言?

格式化本身与方言无关,但分词器额外兼容了几种方言的特色写法:MySQL 的反引号与 # 注释、PostgreSQL 的 :: 转型与 ->> JSON 取值、SQL Server 的 [方括号] 标识符。这些内容都会被当作整体保留,不会被误改。存储过程、PL/SQL 这类过程化语句不在支持范围内。