跳到正文

SQL 语句格式化

在浏览器中美化或压缩 SQL,支持 MySQL、PostgreSQL、SQL Server、SQLite、BigQuery、Oracle 等共 20 种方言,样式可自选。

已格式化
点击“格式化 SQL”来美化你的查询。
在浏览器中运行 · 无需上传工作原理

SQL 格式化 使用方法

  1. 1

    粘贴 SQL

    粘贴一条查询或整个脚本,也可以打开 .sql 文件;点击“示例”可查看一条杂乱的查询来试用。

  2. 2

    选择方言

    选择你使用的数据库,以便正确识别它的引号、运算符和关键字。

  3. 3

    设置样式

    选择关键字大小写、缩进、逗号位置和布局,使其符合团队的编码规范。

  4. 4

    格式化并复制

    点击“格式化 SQL”或“压缩”,然后复制高亮显示的结果,或下载为 .sql 文件。

限制与 Pro

免费使用,无需注册:支持 20 种方言,.sql 文件最大 10 MB,脚本需在 20 秒内完成格式化;输出超过 600,000 个字符时只预览一部分,复制或下载仍为完整内容。

Pro 可去除广告;格式化功能本身在所有方案中都一样。 了解 Pro

关于 SQL 格式化

把日志、ORM 调试输出或同事聊天消息里的单行查询粘贴进来,这个格式化工具会像细心的人那样重新排版:每个子句独占一行,选取的列和连接语句缩进在对应关键字下方,子查询层层嵌套,结构一目了然。它支持 20 种 SQL 方言,包括标准 SQL、MySQL、MariaDB、PostgreSQL、SQL Server T-SQL、SQLite、Oracle PL/SQL、BigQuery、Snowflake、Redshift、Spark、Trino、DuckDB、ClickHouse、Hive、Db2、Db2 for i、SingleStore、TiDB 和 Couchbase N1QL,因此反引号标识符、方括号、:: 类型转换、美元符号引用字符串等方言语法都会原样保留。

你可以选择自己的代码风格:关键字大写、小写或保持原样,函数名和数据类型同理;缩进用两个空格、四个空格或制表符;逗号放在行尾或行首;AND 和 OR 放在换行之前或之后;还可以选择标准布局或把关键字对齐成一列的表格式布局。包含多条语句的脚本会用空行分隔。压缩功能则相反,会删除注释和多余空白,同时保留字符串、带引号的名称和优化器提示不变。

输出结果带语法高亮,可以复制,也可以下载为 .sql 文件。格式化使用开源的 sql-formatter 库,首次点击“格式化 SQL”时才会加载,并在后台线程中运行,较长的脚本也不会卡住页面。

格式化只会改变空白和字母大小写。它不会校验表名或列名,不会执行查询,也不会为提升性能而改写语句;带有特殊厂商语法的存储过程,可能需要选择最接近的方言。

隐私

SQL 由 Web Worker 在你的浏览器中完成格式化,包含表名、客户数据或凭据的查询都不会发送到服务器。你选择的方言和样式会保存在本地存储中,SQL 本身不会被保存。

功能

20 种 SQL 方言

支持 MySQL、PostgreSQL、SQL Server、Oracle、BigQuery、Snowflake 等共 20 种。

你的代码风格

可设置关键字大小写、缩进、行首或行尾逗号、AND/OR 位置和表格式布局。

也能压缩

删除注释和空白,方便把 SQL 嵌入代码,字符串和提示保持不变。

SQL 格式化:常见问题

格式化会改变查询的执行结果吗?
不会。只有空白、换行以及关键字、函数和数据类型的字母大小写会变化,标识符、字符串字面量和注释都会原样保留。SQL 关键字不区分大小写,所以改变关键字大小写是安全的。PostgreSQL 中带引号的名称区分大小写,因此本工具不会改动它们。
为什么会出现解析错误?
格式化工具需要识别语句结构,所以括号不匹配、缺少关键字或使用了其他数据库的语法都会导致失败。错误信息会给出行号、列号以及此处期望的内容。请选择你的数据库对应的方言:方括号标识符需选 SQL Server,反引号需选 MySQL、MariaDB 或 BigQuery,并检查末尾是否有未写完的语句。
逗号应该放在行首还是行尾?
行尾逗号是最常见的风格,大多数工具也是这样输出。行首逗号便于注释掉最后一列,新增列时差异也只占一行,所以一些数据团队更喜欢它。选择你的团队在用的即可;该选项只适用于“标准”布局。
能格式化存储过程和包含多条语句的脚本吗?
可以。粘贴完整脚本后,每条语句都会被格式化并用空行分隔,包括 CREATE TABLE、INSERT、UPDATE、MERGE 和常见的过程块。带有厂商特有语法的过程代码,如含 GO 分隔符的复杂 T-SQL 批处理或 PL/SQL 包,可能无法被完全识别;请选择对应方言,某段失败时可分成较小的块再格式化。
压缩会删除哪些内容?
压缩会删除 -- 和 /* */ 注释(MySQL 和 MariaDB 中还包括 # 注释),把连续的空格和换行合并为单个空格,并去掉逗号和括号旁的空格。字符串字面量、带引号的标识符,以及写成 /*+ … */ 的优化器提示或 MySQL 的 /*! … */ 都会保留,因此压缩后的查询与原查询运行结果完全一致。