数据库与 SQL 工具

SQL 格式化看清查询层次,保留原始内容

看清查询层次,保留原始内容

SQL 格式化

SQL 输入

结果

内容仅在浏览器本地处理,不连接数据库,也不保存历史。

方言与显示方式

本页不连接数据库、不查表结构、不检查权限,也不生成 EXPLAIN。格式化成功不代表语法正确;语法树解析成功也不能证明语句能在真实数据库运行。 仅调整结构关键字;ACTION、NO 等上下文词保持源拼写,以保护标识符。

输入最多 100,000 个 UTF-16 单元、20,000 个词法单元、50 层括号及 200 条语句。AST 限 5,000 个词法单元和 30 层。输出最多 1,000,000 个单元,预览每次展开 20,000 个,导出保留全量。

输入 SQL 或选择示例。

SQL 格式化适合检查日志里挤成一行的查询,也适合提交代码前统一排版。先选择生成这段语句的数据库方言;看起来类似的引号,在不同数据库中可能有不同含义。

SQL 美化突出连接与子查询层次,SQL 压缩减少词法单元以外的空白。使用 SQL 在线格式化时,应把可读性检查与数据库验证分开,不能仅凭排版成功就认定语句可执行。

为什么使用 SQL 格式化?

沿着子句阅读查询

SQL 格式化会展开子句并统一缩进,同时核对字符串、数字写法与注释是否保留。遇到无法确认内容一致的改写时会拒绝输出,避免把异常结果复制回代码。

紧凑查询展开为缩进的多行,字符串和注释色块保持原样。

排版与结构分别查看

语法树模式使用独立解析器处理四种方言的受支持语法。Oracle 可以排版,但不提供语法树;结构树展示解析器如何理解语句,并不是数据库执行计划。

同一查询分出语法树分支,旁边保留独立的排版文本面板。

先选语法,再调整样式

01

按来源选择方言

MySQL、PostgreSQL、SQLite、SQL Server 与 Oracle 的引用规则不同。选择 PostgreSQL 不会把 MySQL 查询转换成另一种方言,只会改变本次操作采用的语法规则。

02

区分三种输出模式

格式化用于阅读,压缩用于减少空白,AST 输出结构化 JSON。缩进与大小写用于排版;语法树对数字和输入复杂度有更严格的限制。

03

回填之前先看预览

自动处理等待约 350 毫秒;关闭后用按钮或 Ctrl/Cmd+Enter 执行。使用结果会先预览替换内容,应用后可撤销,连同之前的参数和结果一起恢复。

排版和解析各司其职

五种排版方言

使用 sql-formatter,可选两个空格、四个空格或制表符,以及关键字大写、小写或保持原样。配置保持标识符、函数名和数据类型的大小写。 仅调整结构关键字;ACTION、NO 等上下文词保持源拼写,以保护标识符。

压缩时保留注释

减少词法单元外的空白,不删除行注释、块注释及执行提示。PostgreSQL 相邻字符串依赖的换行也会保留,因此紧凑结果未必只有一行。

独立的语法树结果

node-sql-parser 解析其支持的 MySQL、PostgreSQL、SQLite 和 Transact-SQL 子集。JSON 导出只包含当前语法树,不混入编辑器历史或此前输入。

语法能力与使用边界

不执行数据库查询
本页不连接数据库、不查表结构、不检查权限,也不生成 EXPLAIN。格式化成功不代表语法正确;语法树解析成功也不能证明语句能在真实数据库运行。
完整脚本并非支持范围
存储过程、触发器、函数定义、BEGIN/DECLARE 块、GO 批处理、自定义 DELIMITER、模板和客户端元命令不在范围内。Oracle 支持排版,不支持 AST。
语法树检查数字精度
AST 接受十进制整数和最多 15 位有效数字的普通小数,不接受指数及十六进制写法,并核对数字节点与源值一致。格式化与压缩不受这项数值精度限制。 小数点前必须有数字,例如使用 0.5 而非 .5。
必要的换行不能删除
压缩不承诺单行;删除 -- 注释后的换行会吞掉后续语句。提示和可执行注释保持原文,但本工具不会验证这些内容在具体服务器上的效果。
资源上限明确可见
输入最多 100,000 个 UTF-16 单元、20,000 个词法单元、50 层括号及 200 条语句。AST 限 5,000 个词法单元和 30 层。输出最多 1,000,000 个单元,预览每次展开 20,000 个,导出保留全量。

SQL 格式化常见问题

怎样为 SQL 查询选择排版方式?

先固定方言与缩进,让连接、条件和子查询便于阅读。这款 SQL 格式化工具将排版与语法树检查分开;修改后的查询仍应结合实际数据库进行审查。

SQL 关键字有必要全大写吗?

大写能够突出子句,但它是风格约定。团队习惯小写时可以选择小写,也可以保持原样;这项设置不用于改写字符串或带引号的标识符。

能整理 SQL 而不增加大量行吗?

选择压缩模式即可减少外部空白,同时保留注释和词法内容。行注释后以及 PostgreSQL 相邻字符串之间必要的换行不会删除,因而不会为了单行而强行丢弃内容。

不执行 MySQL 查询也能检查它是否合法吗?

AST 模式能够报告解析器是否接受这段语法,但无法检查真实表、列类型、权限或服务器行为。只得到格式化结果时,能够确认的更少:那只是排版操作。

为什么客户端元命令会让 SQL 格式化器报错?

例如 psql 的反斜杠命令属于客户端指令,不属于普通 SQL 语法。请单独取出要排版的查询,并另外保留原始脚本;本工具不会解释这些指令。

发现排版问题?

开始检查下一段查询

用 SQL 格式化查看可读文本、紧凑文本或受支持的语法树,检查结果后再决定是否回填编辑器。