数据与格式转换

SQL 格式化

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

  • 十多种方言可选,包括 MySQL、PostgreSQL、SQLite、BigQuery、Snowflake、Redshift、Oracle、SQL Server、Spark、Trino 等
  • 关键字、函数名和数据类型大小写可切换:保持原样、统一大写或统一小写
  • 缩进宽度支持 2 空格、4 空格和制表符,并可调整语句间空行、运算符紧凑程度和分号位置
  • AND、OR 等布尔运算符可选择换行在前或换行在后,方便适配团队规范
  • 一键复制格式化版或紧凑单行版,适合查询调试、日志记录或 ORM 参数
  • 支持上传 .sql 文件读取、下载格式化结果,方便整理迁移脚本和数据导出
  • 解析失败时显示行列位置和错误描述,定位多语句和长查询中的语法问题
  • 完全本地处理:查询语句、表名、库名和真实参数不会发送到服务器
工具/SQL 格式化
等待输入
SQL 命令

功能简介

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

  1. 01

    多方言整形

    内置 MySQL、PostgreSQL、SQLite、MariaDB、TiDB、BigQuery、Snowflake、Redshift、Oracle PL/SQL、SQL Server (Transact-SQL)、Spark、Trino、Hive、ClickHouse、DuckDB、Couchbase N1QL、Db2 等方言,按各自语法关键字进行格式化。

  2. 02

    关键字大小写

    关键字以及常见函数名、数据类型可以选择保持原样、统一大写或统一小写,适配团队风格或 SQL review 规范。

  3. 03

    缩进与语句间距

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

  4. 04

    AND / OR 换行位置

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

  5. 05

    紧凑模式

    点击复制压缩版会把多行 SQL 压缩成一行,适合粘贴到 ORM 调用、日志字段、命令行或者一些只接受单行查询的工具中。

  6. 06

    错误定位

    sql-formatter 解析失败时,会显示具体行列位置和错误描述,帮助你定位漏掉的括号、缺失关键字或不被当前方言识别的语法。

  7. 07

    语句间空行

    可以控制多条语句之间的空行数量,整理迁移脚本、初始化脚本或测试 fixture 时更紧凑或更分明。

  8. 08

    文件上传与下载

    支持选择本地 .sql / .txt 文件读取,也可以把格式化后的结果下载为 .sql 文件,便于和迁移工具或版本控制工作流配合。

  9. 09

    完全本地处理

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

如何使用

常见流程是:选好方言,粘贴 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,工具会按当前选项继续重新格式化。

功能说明

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

  • 内置 sql-formatter,覆盖 15 种以上主流方言,每种方言按各自关键字识别。
  • 关键字、函数名和数据类型大小写可调整,表名和列名保持原始文本。
  • 缩进宽度支持 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 字段或日志 payload,可以把它交给 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 时,可以用压缩版减少换行;如果 SQL 字符串字面量依赖连续空白,请先检查压缩后的结果。
  • 迁移脚本可以保留语句间空行,让每条 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 方言?

支持 MySQL、PostgreSQL、SQLite、MariaDB、TiDB、BigQuery、Snowflake、Redshift、Oracle PL/SQL、SQL Server (Transact-SQL)、Spark、Trino、Hive、ClickHouse、DuckDB、Couchbase N1QL、IBM Db2 以及通用 SQL,共十几种。

方言选错会怎么样?

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

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

默认大小写策略是保持原样,工具不会主动改写。把关键字策略改为大写或小写,再点击格式化即可看到效果。

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

格式化模式只调整空白、换行和关键字大小写,不会主动改写引号内的字符串、注释或参数占位符。压缩模式会进一步压缩空白,处理依赖连续空白的字符串时请先检查结果。

压缩模式做了什么?

复制压缩版会把多行 SQL 压成一行,并删除多余空白。它适合常规 ORM 调用、日志字段、命令行或者只支持单行查询的接口;如果查询里的字符串字面量依赖连续空白,请使用格式化版或先确认压缩结果。

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

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

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

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

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

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

能处理很大的 SQL 文件吗?

几百 KB 到几 MB 的脚本通常没问题;超大的迁移文件(几十 MB 或包含大量 INSERT)可能会让浏览器变慢,建议先拆分成单条或分批处理。

更多相关工具

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