博客
简体中文

SQL 格式化工具 — 在线美化 SQL 语句与缩进

美化 SQL(MySQL、PostgreSQL 等方言,关键字大小写,缩进)

在浏览器中处理 · 不上传任何内容

关键字大小写
缩进

格式化后的 SQL

功能简介

从日志或 ORM 里复制出来的查询,经常是一整行,或者缩进乱七八糟,读起来和审查起来都很费劲。这个工具把 SQL 按 SELECT、FROM、WHERE 等子句拆开,并统一缩进。输入时结果会实时更新。

使用方法

  1. 把 SQL 粘贴到输入框。用分号分隔的多条语句也没问题。
  2. 选择与你的数据库对应的方言。
  3. 选择关键字大写、小写或保持原样。
  4. 选择 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 中的所有错误。

没找到想要的工具?