SQL 格式化

SQL 在线格式化美化工具

粘贴 SQL 语句即可格式化——每个子句一行,字段和条件对齐,子查询和 CASE 表达式逐层缩进——也可以压缩成一行。字符串、带引号的名称和注释都不会改动,默认按 MySQL 规则读取,SQL 不会离开你的浏览器。

关键字
输出
缩进
  • 格式化后的 SQL

    -- 今年消费最多的客户 SELECT c.id, c.name, COUNT(o.id) AS order_count, SUM(o.total) AS spent, CASE WHEN SUM(o.total) > 10000 THEN '金牌' ELSE '普通' END AS tier FROM customers c LEFT JOIN orders o ON o.customer_id = c.id AND o.status <> 'cancelled' WHERE o.created_at >= '2026-01-01' AND c.province IN ('广东', '浙江') GROUP BY c.id, c.name HAVING COUNT(o.id) > 2 ORDER BY spent DESC LIMIT 10;

语句数1
行数25
注释数1
处理前大小(字节)410
处理后大小(字节)450

字符串、带引号的名称、数字和注释都按原样保留,只改变关键字大小写和空白。

全部在你的设备上计算 · 公式已用已知数值验证 · 了解我们如何验证

SQL 格式化工具怎么用

  1. 粘贴一条语句或整个脚本——用分号分隔的多条语句也可以。从慢查询日志、MyBatis 日志或 ORM 输出里复制的长长一行 SQL 最适合拿来格式化。
  2. 在数据库方言里选择你的数据库(默认 MySQL),让工具按它的引号规则读取(见下表),再选择关键字写成大写、小写还是保持原样。
  3. 选格式化得到每个子句一行、用 2 个空格、4 个空格或制表符缩进的结果,或选压缩成一行,把每条语句压到一行里,方便放进日志、配置文件或代码字符串。
  4. 点击结果旁的复制,或点下载保存为 .sql 文件。

排版规则

工具把 SQL 拆成一个个记号——关键字、名称、字符串、数字、运算符、注释——再按几条固定规则排版:

不会改动的内容

字符串(包括 '广东' 这样的中文)、带引号的名称(`order`、"Order"、[Order Date])、数字、注释和 PostgreSQL 的美元符号引用体都按原样复制。只有 SQL 关键字会改变大小写,内置函数名(如 COUNT(、IFNULL()只在后面紧跟括号时才改。表名和字段名保持你的写法;一些在某些数据库里是关键字、但常被当作字段名的词——date、name、status、type、value、timestamp——也保持原样。点号后面的名称(如 t.order)一律当作名称处理。除了空白,什么都不增删,所以格式化后的语句查询结果完全相同。

计算示例

输入框里的示例是一条写在一行里的统计查询,带有注释、CASE 表达式、两部分的连接条件、IN 列表和 HAVING 子句。按默认设置(MySQL、关键字大写、2 个空格)格式化后:

-- 今年消费最多的客户
SELECT
  c.id,
  c.name,
  COUNT(o.id) AS order_count,
  SUM(o.total) AS spent,
  CASE
    WHEN SUM(o.total) > 10000 THEN '金牌'
    ELSE '普通'
  END AS tier
FROM
  customers c
  LEFT JOIN orders o ON o.customer_id = c.id
    AND o.status <> 'cancelled'
WHERE
  o.created_at >= '2026-01-01'
  AND c.province IN ('广东', '浙江')
GROUP BY
  c.id,
  c.name
HAVING
  COUNT(o.id) > 2
ORDER BY
  spent DESC
LIMIT 10;

注释保持在单独一行,中文字符串保留引号,c、o、spent 这些标识符保持原来的大小写,结果共 25 行。带反引号的 MySQL 分页查询是这样的:

SELECT
  `id`,
  `nick_name`
FROM
  `t_user`
WHERE
  `nick_name` LIKE '%张%'
LIMIT 20, 10

子查询和公共表表达式(MySQL 8.0 起支持 WITH):

WITH recent AS (
  SELECT
    user_id
  FROM
    t_order
  WHERE
    created_at > NOW() - INTERVAL 30 day
)
SELECT
  nick_name
FROM
  t_user
WHERE
  id IN (
    SELECT
      user_id
    FROM
      recent
  )

方言:选择会影响什么

每种数据库的 SQL 写法略有不同,主要区别在引号。方言只告诉工具怎样读取文本——它不会把你的 SQL 改写成另一种数据库的语法。

方言读取方式的差别
MySQL / MariaDB(默认)"文本" 也是字符串,反斜杠是转义符('It\'s'),`名称`,# 注释;-- 后面跟空格时才是注释
标准 SQL'文本',里面的单引号写成 '';"名称";-- 注释 和 /* 注释 */
PostgreSQL$$ … $$ 和 $tag$ … $tag$ 整段保留,带反斜杠转义的 E'…' 字符串,嵌套的 /* /* */ */ 注释,:: 类型转换,$1 参数
SQL Server(T-SQL)[名称](里面用 ]] 表示 ]),N'文本',@变量,#临时表,嵌套注释,单独一行的 GO 作为批处理分隔符
Oracle(PL/SQL)q'[It's]' 替代引号写法,:bind 绑定变量
SQLite除了 "名称",还接受 [名称] 和 `名称`;?、?1、:name、@name、$name 参数

这个区别很重要:'It\'s' 在 MySQL 里是一个完整的字符串,但在标准 SQL 里反斜杠只是普通字符,字符串在第二个引号处就结束了,第三个引号开始了一个永远不会闭合的字符串。方言选错时,你可能会看到“字符串没有闭合”。达梦、人大金仓等国产数据库的语法大多兼容 Oracle 或 PostgreSQL,可以选对应的方言。

会报告的错误

这个工具不是完整的 SQL 解析器,不检查语句对你的数据库是否有效。它只在无法确定记号在哪里结束时停下:没有闭合的字符串、带引号的名称、注释或美元符号引用体,不成对的括号,以及从 Word 或聊天软件里粘贴过来的弯引号(‘ ’ “ ”)。每种错误都会显示行号、列号,并用 ^ 标出位置。

限制与小技巧

SQL 不会离开你的设备

格式化在你的浏览器里完成。SQL 语句常常暴露表结构、字段名和写在条件里的客户数据,这些内容都不会被上传或记录,也不会被保存:刷新页面就会清空。

常见问题

格式化会改变 SQL 的执行结果吗?

不会。只改变空白和关键字的大小写,而 SQL 关键字不区分大小写。字符串、带引号的名称、数字和注释都原样复制,所以查询返回的行完全一样。

应该选哪种方言?

选语句实际运行的数据库,国内项目大多是 MySQL,所以默认就是它。方言只影响引号、反斜杠和注释的读取方式;如果语句里没有上表中的特殊写法,选哪种方言结果都一样。

为什么 date、name 这样的词没有变成大写?

date、name、status、type、value、timestamp 这些词在某些数据库里是关键字,但也是非常常见的字段名,所以保持你的写法。count、date 这样的函数名只有后面跟着括号时才会变成大写。

能帮我修正 SQL 语法错误吗?

它能找出没有闭合的字符串、注释和带引号的名称、不成对的括号和中文弯引号,并标出位置。其他错误,比如关键字拼错、少了逗号,会按原样格式化——这些要由数据库报告。

我的 SQL 会被上传吗?

不会。格式化工具以 JavaScript 在你的浏览器里运行,语句不会离开你的设备,页面加载后断网也能使用。

把这个计算器嵌入你的网站

可免费用于你的网站或博客。把下面的代码粘贴到想显示计算器的位置即可。

最后更新:2026年10月16日

菜单

分类

理财与贷款计算器15款计算器商业与购物计算器5款计算器健康与减重计算器6款计算器数学与学习计算器7款计算器日期与时间计算器5款计算器节日与重要日子倒计时8款计算器生活实用工具7款计算器程序员在线开发工具9款计算器

CalcWorthy

关于我们联系我们隐私政策使用条款

语言

语言
简体中文Simplified ChineseEnglishEnglishالعربيةArabicবাংলাBanglaDeutschGermanEspañolSpanishفارسیPersianFrançaisFrenchעבריתHebrewहिन्दीHindiBahasa IndonesiaIndonesianItalianoItalian日本語Japanese한국어KoreanBahasa MelayuMalayNederlandsDutchPolskiPolishPortuguêsPortugueseРусскийRussianไทยThaiTürkçeTurkishУкраїнськаUkrainianاردوUrduTiếng ViệtVietnamese