SQL 美化、压缩,关键字大小写切换,适配 MySQL / Postgres / Oracle / SQL Server。

切换工具
占位符 ? / $1 / :name 会被识别并保留。
输入0 字符 · 0 行
输出0 字符 · 0 行

使用说明

用途

SQL 在线格式化、美化、压缩工具,支持 MySQL、PostgreSQL、Oracle、SQL Server、SQLite、BigQuery、Snowflake、PL/SQL 等主流方言。一键把单行长 SQL 展开成易读的多行缩进结构,SELECT 字段对齐、JOIN 条件独占一行、子查询合理换行。同时支持 SQL 压缩(用于嵌入代码或日志记录)、关键字大小写转换。常用于 Code Review、慢查询排查、复杂报表 SQL 维护、ORM 生成 SQL 整理等场景,所有处理在浏览器本地完成。

操作步骤

  1. 把 SQL 粘贴进编辑器,或从日志、ORM 输出复制过来;支持单条或多条用分号分隔
  2. 选方言:MySQL(默认)、PostgreSQL、Oracle PL/SQL、SQL Server T-SQL、Snowflake 等
  3. 点「格式化」展开为标准缩进,SELECT 字段、FROM 表、WHERE 条件分别独占行
  4. 需要压缩用于嵌入代码点「压缩」去掉所有空白和换行
  5. 关键字大小写可选「全部大写」(传统 SQL 规范)或「全部小写」(现代风格)
  6. 语法错误(缺逗号、括号不匹配、未闭合引号)会高亮报错位置
  7. 多条 SQL 用分号分隔,工具会逐条独立格式化
  8. 导出可保存 .sql 文件或复制格式化结果直接粘进代码

常见问题

为什么 Oracle PL/SQL 的 BEGIN...END 块格式化后缩进不对?
请在方言下拉里选 Oracle PL/SQL,工具会启用专门的块级解析器处理 BEGIN/END、IF/THEN/END IF、LOOP/END LOOP 这种过程结构。如果你选了 MySQL,PL/SQL 块会被当作未识别语法保持原样。
复杂窗口函数(OVER PARTITION BY)能正确格式化吗?
可以。OVER (PARTITION BY ... ORDER BY ... ROWS BETWEEN ...) 会被拆成易读的多行结构,PARTITION BY、ORDER BY、frame 子句各独占一行缩进。这对分析型报表 SQL 特别有用。
MyBatis 的 #{} 占位符会被破坏吗?
不会。本工具识别 #{varName}、${tableName}、:namedParam、? 这几种 ORM 占位符,格式化时会原样保留不被当成 SQL 语法切割。
EXPLAIN 输出和带反引号的 MySQL SQL 能格式化吗?
MySQL 方言下反引号(`column_name`)、双引号、注释(-- 和 /* */)都正确识别。EXPLAIN 本身是命令不是查询语句,但工具会保留它放在最前面不影响后续 SELECT 格式化。
能不能批量格式化整个 .sql 脚本文件?
可以。拖入 .sql 文件后工具会按分号自动切分多条语句,每条独立格式化再拼回。注意:跨多条 SQL 的 BEGIN/COMMIT 事务块会保持事务原结构。

应用场景

  • Code Review:同事提交的 200 行 SQL 单行写成一坨,格式化后才能审查 JOIN 顺序和 WHERE 条件
  • 排查慢查询:从慢日志拿到的 SQL 关键字混在一起,格式化后才能看清子查询和 INDEX 命中情况
  • 维护报表 SQL:BI 工具或老报表生成的几百行 SQL,定期格式化保持团队可读
  • 整理 ORM 输出:MyBatis / Hibernate 打印的 SQL 经常是单行,格式化后才能贴进文档或工单
  • 准备数据库迁移:旧库导出的 DDL 单行混乱,格式化后再做版本管理和 diff 对比

适用场景

日常 SQL Code Review、慢查询排查、ORM 生成的 SQL 整理、跨方言迁移前的预处理。DBA、后端开发、数据分析、报表工程师的高频场景。多方言支持、ORM 占位符保留、关键字大小写转换是关键差异点。