SQL 格式化工具 — 在线美化 SQL 语句与缩进
美化 SQL(MySQL、PostgreSQL 等方言,关键字大小写,缩进)
在浏览器中处理 · 不上传任何内容
功能简介
从日志或 ORM 里复制出来的查询,经常是一整行,或者缩进乱七八糟,读起来和审查起来都很费劲。这个工具把 SQL 按 SELECT、FROM、WHERE 等子句拆开,并统一缩进。输入时结果会实时更新。
使用方法
- 把 SQL 粘贴到输入框。用分号分隔的多条语句也没问题。
- 选择与你的数据库对应的方言。
- 选择关键字大写、小写或保持原样。
- 选择 2 个空格、4 个空格或制表符缩进,然后复制结果。
工作原理
- 格式化由开源库
sql-formatter完成。它先把输入拆分成词法单元(token),再根据子句和括号的层级决定换行和缩进。 - 支持的方言有标准 SQL、MySQL、PostgreSQL、MariaDB、SQLite、BigQuery、Oracle(PL/SQL)和 SQL Server(T-SQL)。方言会影响标识符引号(
`、"、[ ])、参数标记(?、$1、@name)和运算符的识别方式。 - MyBatis 占位符
#{id}、#{name,jdbcType=VARCHAR}和${table}在所有方言中都原样保留。在 MySQL 中#通常表示注释开始,但#{会被当作占位符处理。跨多行的占位符也会保留;不支持#{list[${i}]}这样的嵌套大括号。 - 绑定参数:标准 SQL、MySQL 和 MariaDB 用
?和:name;PostgreSQL 用$1和:name;Oracle 用:name;SQL Server 和 BigQuery 用@name;SQLite 支持?、?1、:name、@name和$name。 - 出错时会指出解析中断处的行号、列号和文本。
- 关键字大小写选项只作用于保留字。字符串字面量、注释和标识符(包括中文的表名、列名)都不会被修改。
- 选择制表符时,每一级缩进使用一个制表符。
- 它只负责重新排版,不会执行查询,也不检查查询的含义。
示例
输入:
select id, name from users where age > 20 and city = '北京' order by name
结果(标准 SQL、大写、2 个空格):
SELECT
id,
name
FROM
users
WHERE
age > 20
AND city = '北京'
ORDER BY
name
常见问题
我的查询会发送到服务器吗?
不会。格式化由 sql-formatter 库在你的浏览器中完成,查询既不传输也不保存。不过,含有真实密码或个人信息的查询,最好不要在共享屏幕上展示。
应该选哪种方言?
选你使用的数据库。这样方言特有的语法就能被正确识别,比如 MySQL 的反引号、PostgreSQL 的 `::` 类型转换和 `$1` 参数。不确定的话,先用“标准 SQL”。
格式化会改变查询的执行结果吗?
只会改变空白、换行和关键字的大小写。字符串字面量、注释和标识符的内容保持不变,修改关键字大小写也不会动引号里的值,所以查询的行为完全一样。
报错了怎么办?
没有闭合的引号,或所选方言不支持的符号,都可能让解析中断。检查错误信息指出的位置,或换一种方言试试。这是格式化工具而不是校验工具,不能发现 SQL 中的所有错误。