SQL格式化工具

SQL在线格式化

日志里的SQL挤成一行,看不清关联条件?选择数据库方言,设置缩进,把查询整理成便于阅读和检查的结构。

查询工作台浏览器内格式化 · 不执行SQL
加载示例
213 / 50,000个字符

02 格式化结果

保留原始查询,方便对照

把长SQL整理成可读的查询

从ORM或应用日志复制的SQL常常没有换行。在线SQL格式化工具会整理字段列表、JOIN条件和子查询的缩进,让你更容易沿着查询结构检查逻辑。这里的“SQL美化”指排版整理,并不会改写业务规则。

粘贴查询后,先选数据库方言,再选择2个空格、4个空格或制表符,以及关键字大小写。点击“格式化SQL”即可生成独立结果。原文仍在左侧,便于逐段对照;修改输入或选项后,旧结果会清空,需要重新格式化。

方言选原数据库,不是目标数据库

工具提供标准SQL、PostgreSQL、MySQL、MariaDB、SQLite、SQL Server(T-SQL)、Oracle SQL、BigQuery和Snowflake共9种选择。MySQL的反引号、T-SQL的方括号以及PostgreSQL的参数写法都有各自语境,选对方言有助于识别语句。

方言选择不会把MySQL转换成PostgreSQL,也不会替换函数或迁移表结构。Oracle SQL选项用于查询整理,不能据此认为存储过程也受支持。

排版之后,仍要检查查询含义

WHEREHAVING分开显示,可以更快定位行筛选与聚合筛选;为CTE和嵌套查询增加缩进,也有助于代码评审。不过,整齐的SQL仍可能引用不存在的字段,或返回不符合预期的数据。

关键字选项只调整识别到的SQL关键字;标识符、函数名和数据类型的大小写保持原样。字符串仍是数据,参数不会被填入实际值。注释会保留,但位置或空白可能调整。使用结果前,请结合数据库环境核对。

SQL格式化示例

下方使用虚构数据展示实际格式化结果,采用大写关键字和2个空格缩进。加载工具中的示例时,会自动选中相应方言。

JOIN与聚合

按客户汇总已支付订单,再筛选总额。格式化后,更容易区分关联条件、行筛选和聚合筛选。

SELECT
  c.id,
  c.name,
  count(o.id) AS order_count,
  sum(o.total) AS revenue
FROM
  customers c
  JOIN orders o ON o.customer_id = c.id
WHERE
  o.status = 'paid'
GROUP BY
  c.id,
  c.name
HAVING
  sum(o.total) > 1000
ORDER BY
  revenue DESC;
返回格式化工具

CTE与窗口函数

用PostgreSQL的CTE和ROW_NUMBER对客户订单排序,查看嵌套SELECT如何展开。

WITH
  ranked_orders AS (
    SELECT
      id,
      customer_id,
      total,
      row_number() OVER (
        PARTITION BY
          customer_id
        ORDER BY
          created_at DESC
      ) AS position
    FROM
      orders
    WHERE
      created_at >= date '2024-01-01'
  )
SELECT
  customer_id,
  id,
  total
FROM
  ranked_orders
WHERE
  position = 1
ORDER BY
  customer_id;
返回格式化工具

INSERT与注释

MySQL插入示例包含反引号、注释和带分号的字符串。引号中的分号属于数据。

-- Fictional seed data
INSERT INTO
  `products` (`sku`, `name`, `price`)
VALUES
  ('DEMO-01', 'Desk lamp; warm light', 29.95),
  ('DEMO-02', 'Reader''s notebook', 8.50);
返回格式化工具

常见问题

如何复制或保存格式化结果?

完成格式化后点击“复制”,或使用下载按钮保存为formatted.sql。也可以按Ctrl+Enter或Command+Enter触发格式化。输入与设置发生变化时,先重新生成结果再导出。

SQL会上传到服务器吗?

格式化在浏览器的Web Worker中运行,工具不会将查询提交给格式化API、连接数据库、持久保存输入或把SQL写入网址。复制和下载由你主动操作。

格式化成功就说明SQL正确吗?

不能。工具不检查表名、列名、类型、访问权限或执行计划,也不会运行查询。语法验证和性能分析仍需使用对应数据库的工具。

能一次整理多条SQL吗?

可以用分号分隔普通SQL语句。识别到的字符串内部的分号仍会作为字符串内容处理。自定义DELIMITER命令、存储过程和客户端脚本不属于支持范围。

为什么提示无法格式化?

先检查方言是否匹配,再检查引号和括号是否成对。Jinja模板、应用代码插值和数据库扩展语法可能无法识别。单次输入上限为50,000个字符,任务超过10秒会停止;大脚本请分段整理。

占位符和注释会被删除吗?

工具不会为受支持的方言占位符替换参数值,注释也会保留,但注释排版可能变化。并非所有模板参数写法都能识别;禁用格式化的特殊注释还可能让局部内容保留原排版。

SQL Formatter · GitHub

返回格式化工具