tigtools

SQL 格式化工具

粘贴查询并选择数据库方言,即可获得整洁、缩进统一的 SQL。所有操作都在本地完成,不会向服务器发送数据。

在浏览器中运行 无需注册

缩进

使用方法

  1. 粘贴一条或多条 SQL 语句,或点击“试用示例”。
  2. 选择数据库使用的方言,以便正确识别关键字、引号和运算符。
  3. 设置关键字大小写和缩进。输入时,格式化后的查询会显示在右侧。
  4. 点击“压缩”生成单行版本,然后复制结果或将其下载为 .sql 文件。

工作原理

格式化功能使用开源的 sql-formatter 库。它会根据你选择的方言规则将查询拆分为词元,将每个主要子句(SELECT、FROM、JOIN、WHERE、GROUP BY、ORDER BY…)单独放在一行,对列列表和条件进行缩进,并按你的设置调整关键字大小写。它只会调整空白字符,以及(如果你选择)关键字的大小写;标识符、字符串字面量和注释都会保留。选择正确的方言很重要:例如,MySQL 使用反引号引用名称,SQL Server 使用方括号,而 PostgreSQL 使用 $$ 开始函数体。

此格式化工具用于调整代码布局,并非数据库。它不会检查表或列是否存在,也不会验证完整语法,因此即使 SQL 无效,也可能照常完成格式化。如果无法解析输入内容(例如括号未闭合),它会报告停止位置的行号和列号。

压缩的工作方式不同:它会保留所有词元,只将连续的空白字符合并为一个空格,并移除注释(优化器提示,例如 /*+ INDEX(t) */,以及 MySQL /*! … */ 注释会保留,因为它们会改变行为)。字符串、带引号的标识符和美元引号括起的内容都会原样复制。如果引号或注释未闭合,压缩会报错停止,而不会猜测如何处理。

示例

阅读日志中的查询

慢查询日志中有一条 400 字符长的查询,都挤在一行里。选择 MySQL 方言和大写关键字后,查询会变成易读的代码块,每个 JOIN 和 WHERE 条件都各占一行,缺失的索引也就一目了然。

统一代码审查风格

团队在提交前,会统一使用 PostgreSQL 方言、小写关键字和 4 个空格缩进来格式化每个迁移文件,这样代码差异中就只会显示真正的改动。

在代码中嵌入 SQL

压缩功能会将带注释的多行报表查询合并为一行,例如 SELECT id, name FROM users WHERE active = 1 ORDER BY name,方便粘贴到脚本的字符串中。

常见问题

支持哪些数据库?

支持 Standard SQL、MySQL、MariaDB、PostgreSQL、SQLite、SQL Server (T-SQL)、Oracle PL/SQL、BigQuery、Snowflake、Redshift、Spark SQL、Hive、Trino/Presto、DuckDB、IBM Db2、SingleStoreDB、TiDB 和 Couchbase N1QL。

格式化会改变查询的执行结果吗?

正常情况下不会:只有空白字符以及(如果选择了该选项)关键字大小写会发生变化。在 SQL 中,关键字大小写不影响含义。不过,在生产数据上运行前,仍请检查生成的结果,尤其是使用了特殊方言功能时。

为什么会提示“无法格式化”?

分词器遇到了无法解析的内容,通常是未闭合的括号或引号,或其他方言的语法。请检查错误信息中的行号和列号,并确认所选方言与数据库一致。

它会验证我的 SQL 吗?

不会。它没有连接数据库,也不了解你的架构。查询即使格式化成功,运行时仍可能失败。

隐私

你的 SQL 会通过 JavaScript 在浏览器中完成格式化,不会上传、存储或纳入分析统计;此工具也不会连接数据库。