数据

SQL 格式化

把 SQL 粘贴进来,DevKitLab 会按所选方言重新缩进、对齐子句、规范关键字、函数与数据类型大小写,并在底部状态栏标出解析错误的行列位置。支持 MySQL、PostgreSQL、SQLite、BigQuery、Snowflake、Redshift、Oracle PL/SQL、SQL Server 等 20 种方言;可以切换缩进宽度、布尔运算换行方向、语句间空行、运算符紧凑程度和分号位置,也可以一键压缩为单行、复制、上传文件、下载、读取示例。所有处理在浏览器本地完成,查询语句不会上传到服务器。

正在加载 SQL 引擎
8%
各方言的语法表只需下载一次,本次访问期间会被缓存。
SQL 命令

功能简介

这个 SQL 工具按所选方言重新格式化语句,处理子句缩进、关键字大小写、布尔运算换行、语句间空行、运算符间距,以及压缩为单行的紧凑模式,更适合查询调试、SQL review、迁移整理和 ORM 参数检查。

  1. 01

    多方言整形

    内置 20 种方言:MySQL、MariaDB、TiDB、SingleStore、PostgreSQL、Redshift、SQLite、DuckDB、BigQuery、Snowflake、Oracle PL/SQL、SQL Server (Transact-SQL)、Spark、Trino、Hive、ClickHouse、Couchbase N1QL、IBM Db2、IBM Db2 for i,以及通用标准 SQL。

  2. 02

    关键字、函数与数据类型大小写

    关键字以及常见函数名、数据类型可以选择保持原样、统一大写或统一小写。表名和列名始终保持原始写法,因为部分数据库会把标识符的大小写当作有效信息。

  3. 03

    缩进宽度与语句间距

    可在 2 空格、4 空格、制表符之间切换,并控制多条语句之间的空行数量。整理迁移脚本、初始化脚本或测试 fixture 时,可以在紧凑和分明之间取舍。

  4. 04

    AND / OR 换行位置

    逻辑运算符可以选择换行在前(每行以 AND / OR 开头)或换行在后(保留在上一行末尾),方便对齐团队的 SQL 风格指南。

  5. 05

    运算符间距与分号位置

    打开运算符紧凑后,算术和比较运算符两侧的空格会被去掉;分号也可以单独占一行,让每条语句的结束位置一眼可见。减号后面跟负数时会保留一个空格,否则两个减号连在一起会被当成注释开头。

  6. 06

    紧凑模式

    复制压缩版会把语句压成一行,适合粘贴到 ORM 调用、日志字段或命令行。引号内的字符串和标识符按原样逐字保留,行注释会改写成块注释,不会把后面的语句一起注释掉。

  7. 07

    错误定位

    解析失败时,状态栏会显示具体行列位置和错误描述,点击即可把光标跳到出错处,帮助你定位漏掉的括号、多余的 token 或当前方言不认识的语法。

  8. 08

    文件上传与下载

    可以把 .sql / .txt 文件直接拖进编辑器,也可以点上传文件选择;编辑器里当前的内容能下载为 .sql 文件,便于和迁移工具或版本控制工作流配合。

  9. 09

    刷新后设置还在

    方言、大小写、缩进和显示选项会连同编辑器里的语句一起保存在本机浏览器里,下次回到这个页面不用重新配置一遍。

  10. 10

    完全本地处理

    解析、格式化、压缩、上传读取和下载都在浏览器本地完成。查询语句、库名、表名、字段名和示例数据不会发送到服务器。

如何使用

常见流程是:选好方言,粘贴 SQL,按需要调整大小写、缩进和换行选项,再复制格式化版或压缩版。

  1. 01

    在底部选择目标方言,例如 MySQL、PostgreSQL、SQLite 或 BigQuery。方言只影响关键字识别,不会改写语义。

  2. 02

    把 SELECT、JOIN、UPDATE、INSERT、迁移脚本或 ORM 生成的 SQL 粘贴进编辑器;也可以把本地 .sql 文件拖进来,或点上传文件选择。

  3. 03

    调整关键字大小写、缩进宽度、语句间空行、运算符紧凑程度和分号位置,让输出贴近团队约定。

  4. 04

    如果团队习惯每行以 AND / OR 开头,把布尔运算符换行位置切到换行在前,否则保持换行在后。

  5. 05

    检查编辑器中的格式化结果。若解析失败,看底部状态栏的行列位置和错误描述,回到原始 SQL 修复语法。

  6. 06

    需要紧凑结果时点击复制压缩版;需要可读结果时点击复制格式化版,或点击下载保存为 .sql 文件。

  7. 07

    如果要进一步微调,直接在编辑器里修改 SQL,状态栏会跟着更新;改完点格式化或按 Shift+Alt+F,就按当前选项重新排版。

功能说明

这些功能覆盖了日常处理 SQL 时最常见的几类问题:风格不统一、方言关键字差异、需要紧凑或可读两种形态、需要定位解析错误、需要安全地处理生产 SQL。

  • 覆盖 20 种方言,从 MySQL、PostgreSQL 到 BigQuery、Snowflake、Trino 和 IBM Db2,各自按本方言的关键字集合整形。
  • 关键字、函数名和数据类型大小写可调整,表名和列名保持原始文本。
  • 缩进宽度支持 2 空格、4 空格或制表符,并可控制语句间空行、运算符紧凑程度和分号位置。
  • AND / OR 等布尔运算符可以换行在前或换行在后,匹配团队规范。
  • 可以一键复制格式化版用于阅读,或复制压缩版用于代码、日志和 CLI,压缩时字符串和注释都会原样保留。
  • 语句间空行可调,迁移脚本和初始化脚本看起来更整洁。
  • 把 .sql 文件拖进来或上传后会自动按当前选项格式化;不合法语法会在状态栏标出错误位置。
  • 可以把编辑器里当前的内容下载为 .sql 文件,格式化版或压缩版都行,方便提交到版本库或交给数据库工具执行。
  • 选好的方言和格式化选项会记在本机浏览器里,下次打开还是上次的配置。
  • 所有处理都在浏览器本地完成,不会把查询、表名、库名或样本数据上传。

适合哪些场景

这个页面适合所有需要把 SQL 改得更可读、更统一、更便于 review 或更适合粘贴到其他系统的场景。

  1. 查询调试

    把 ORM 打印出来的单行 SQL 或调试日志里的拼接语句粘贴进来,格式化后逐句检查 JOIN、子查询和 WHERE 条件。

  2. SQL review

    整理 Pull Request 中的 SQL 片段,把团队的关键字大小写、缩进宽度和换行风格统一起来,让 review 时更容易聚焦逻辑。

  3. 迁移与初始化脚本整理

    把 Flyway、Liquibase、Knex、Prisma、SQLAlchemy Alembic 等迁移脚本里的 DDL 与 DML 重新整理,按需要保留语句间空行。

  4. BI 与报表查询

    清理 Metabase、Superset、Looker、Redash 中的报表 SQL,确保 SELECT、GROUP BY、ORDER BY 的层级一目了然。

  5. 存储过程与脚本归档

    整理 PL/SQL、T-SQL 或 PostgreSQL 函数定义中的语句体,便于提交到代码仓库或文档系统。

  6. 面试题与教学示例

    准备 SQL 练习题、答案和讲义时,把示例查询整理成统一风格,方便课件、博客或 README 中展示。

  7. AI Copilot 输出整理

    把 AI 助手生成的长 SQL 重新格式化,确保缩进、大小写和关键字位置稳定,再粘贴到查询编辑器中验证。

  8. 日志 SQL 提取

    从应用日志或慢查询日志中复制出的 SQL 通常是单行,先用这里展开成可读版本,再决定要不要进一步调优。

延伸阅读

如果你处理的是从 SQL 返回的 JSON 字段,或者从日志里抄出来的一段 JSON,可以把它交给 JSON 格式化 整理结构、定位字段、复制 JSON Path。需要把查询结果导出成行列结构时,可以使用 CSV 工具 预览、编辑、转换 CSV / TSV 表格。若 SQL 被包在日志前缀、控制台输出或重复样板里,先用 文本替换 去掉外层文本,再回到这里继续格式化。

关于 SQL 格式化的几点提醒

格式化只改变可读性,不改变查询语义。下面这些点最容易在跨方言、跨团队时引起误解。

  1. 格式化不改写语义

    工具只调整空白、换行、缩进和关键字大小写,不会改变表名、字段名、运算符和参数。同一条 SQL 在格式化前后执行结果应当一致。

  2. 方言只影响关键字识别

    选择 PostgreSQL 还是 MySQL 主要影响哪些词被视为关键字、如何处理引号和函数名。它不会把 MySQL 语法翻译成 PostgreSQL 语法。

  3. 关键字大小写是风格,不是要求

    大多数数据库不区分 SQL 关键字大小写,但团队通常会约定统一风格。把关键字统一为大写有助于在密集代码中区分关键字和标识符。

  4. 标识符大小写要小心

    部分数据库对带引号的标识符区分大小写(如 PostgreSQL)。如果你手动修改表名或列名大小写,请确认目标数据库的行为,必要时保留原样。

  5. 不替代 SQL 解析器或 lint

    工具基于词法格式化,不做语义校验。是否存在不存在的表、字段类型是否匹配、是否触发慢查询,需要由数据库、ORM 或专门的 SQL lint 工具检查。

  6. 不会执行 SQL

    这里只对文本进行排版,不连接任何数据库,也不会发送查询。哪怕粘贴的是 DROP、DELETE,工具也只是对文本做格式化。

使用建议

SQL 越长、子查询和 CTE 越多,越需要稳定的格式化习惯。下面这些做法能减少 review 噪音和误解。

  • 团队内统一一种方言、关键字大小写和缩进风格,避免每次 review 都讨论格式问题。
  • 复杂 SELECT 先用稳定缩进展开层级,简单的迁移脚本可以保持较少语句间空行。
  • 存储过程、长 CTE 和多层子查询适合 4 空格缩进,能看清嵌套关系。
  • 调试 ORM 时,先用工具展开成多行,再判断是否需要新增索引、调整 JOIN 顺序或重写子查询。
  • 需要嵌入到代码、日志或 CLI 时用压缩版,别自己手动删换行,手动处理最容易把字符串字面量里的空格一起删掉。
  • 迁移脚本可以保留语句间空行,让每条 DDL / DML 都有视觉缓冲,review 时更容易分块。
  • 处理生产 SQL 前先脱敏。工具本身不上传数据,但你复制出去的内容可能会进入工单、聊天、文档或截图。

边界与注意事项

这个工具负责 SQL 的排版、缩进和关键字风格,不替代查询解析器、SQL lint、迁移工具或执行引擎。

  • 它不会校验表名、字段名、类型或权限是否真实存在,这些仍然需要数据库本身、DBA 工具或 ORM 的校验能力。
  • 它不会改写查询语义。重写 JOIN 顺序、合并子查询、增删字段、加索引、改方言语法,需要交给数据库专家或重构工具。
  • 它不是 SQL lint。复杂规则、命名约定和反模式检测请使用 sqlfluff、SonarQube、pgFormatter 等专门工具。
  • 它不连接数据库,也不会执行任何 SQL。哪怕粘贴的是 DROP、DELETE 也只是格式化文本。
  • 它不会自动在 MySQL 与 PostgreSQL 之间翻译方言差异,例如函数名、引号、limit/offset 语法。方言选择只影响格式化时的关键字识别。
  • 所有处理在本地完成,但本地安全仍取决于你的设备、浏览器扩展、屏幕共享和复制目标。
  • 编辑器里的内容会保存在本机浏览器里,刷新后还能恢复。在公用或共享设备上用完记得点清空。

常见问题

这里整理了关于方言、大小写、缩进、压缩、错误定位、隐私等常见问题。

我的 SQL 会上传到服务器吗?

不会。解析、格式化、压缩、上传文件读取、复制和下载都在浏览器标签页内完成。DevKitLab 不会把你的查询语句或表结构发送到服务器。

支持哪些 SQL 方言?

共 20 种:MySQL、MariaDB、TiDB、SingleStore、PostgreSQL、Redshift、SQLite、DuckDB、BigQuery、Snowflake、Oracle PL/SQL、SQL Server (Transact-SQL)、Spark、Trino、Hive、ClickHouse、Couchbase N1QL、IBM Db2、IBM Db2 for i,以及通用标准 SQL。

方言选错会怎么样?

方言主要影响哪些词被识别为关键字、字符串和引号风格。一般不会让 SQL 不可读,但少数方言专属语法(例如 BigQuery 的反引号、Postgres 的 dollar-quoted 字符串)在错配方言下可能格式化得不理想,建议匹配实际数据库选择。

为什么我的关键字没有自动大写?

默认大小写策略是保持原样,工具不会主动改写。把关键字切换成大写或小写,编辑器会立刻按新设置重新排版,来回切换也不会丢掉原始文本。

会修改我的字符串字面量吗?

不会。格式化和压缩都只处理 token 之间的空白,以及关键字、函数名和数据类型的大小写。引号内的字符串、带引号的标识符和参数占位符会原样保留,里面的空格也不会变。注释同样保留,唯一的改写是压缩时把行注释换成块注释,免得它把后面的语句一起注释掉。

压缩模式做了什么?

它把语句压成一行,去掉 token 之间的空白,适合 ORM 调用、日志字段、命令行或只接受单行查询的接口。引号内的内容不会被动,行注释会改写成块注释,后面的语句不会被注释掉。如果字符串字面量本身就含换行,那一行会被保留,结果自然不止一行。

解析失败说明 SQL 有问题吗?

通常说明工具的解析器遇到了无法识别的 token,例如方言不匹配、括号不闭合或某些非常规扩展语法。它不等同于数据库的执行错误;可以更换方言、修正语法后再试。

可以处理 PL/SQL 或 T-SQL 的存储过程吗?

可以处理大部分常见的 PL/SQL 与 T-SQL 语句体,但 sql-formatter 并不支持完整的存储过程语义。复杂存储过程建议交给数据库自带的 IDE 或专用工具。

能直接在这里执行 SQL 或连接数据库吗?

不能。这个工具只对 SQL 文本进行排版,不连接任何数据库,也不会发送或执行查询。

能处理很大的 SQL 文件吗?

几百 KB 到几 MB 的脚本通常没问题。上传文件的上限是 5 MB,因为再大的文件读取加格式化会让标签页卡住很久;即使没超过上限,几 MB 的批量 INSERT 也会明显变慢。建议先把大迁移脚本拆成小文件。

更多相关工具

可以继续在数据工具集合里完成查询和数据相关工作流:整理返回的 JSON、查看表格数据,或在多个工具之间快速切换。