SQL 格式化器与压缩器 – 完整文档、最佳实践与集成
Zerlo SQL-Formatter & Minifier 可以让 SQL 立即变得可读(美化)或紧凑(压缩)。你可以设置 缩进(2/4/8 个空格)、关键字大小写(UPPER/小写/保留),以及在 Advanced 区域的 注释移除 与 强制分号。通过 快捷访问 提供示例代码段,使用 Self-Test 可以在几秒钟内测试行为。该页面在此可访问: zerlo.net/formattersql.
目录
- 快速开始
- 功能概览
- 快捷访问示例(用例)
- 高级选项(详细信息与注意事项)
- 典型应用类别(12 种场景)
- 集成:网站、iFrame、Teams
- 可选 JSON-API(包含示例)
- 自测(逐步)
- 专业提示、性能与安全
- 方言提示与限制
- 故障排除与常见问题
- 现在试用
1) 快速开始
- 打开 zerlo.net/formattersql.
- 在左侧粘贴你的 SQL 或者直接输入。
- 选择 模式: 美化 (可读) 或 压缩 (紧凑).
- 设定 缩进 (2/4/8) 和 关键字大小写 (UPPER/lower/Preserve) 设置。.
- 可选: 移除注释, 强制分号.
- 点击 格式化 – – 结果显示在右侧,包括 复制 和 另存为 .sql.
- 在 自测 你可以自动对最重要的规则进行对照测试。.
2) 功能概览
- 美化:: 换行和缩进用于
SELECT,FROM,JOIN,WHERE,GROUP BY,HAVING,ORDER BY,LIMIT,UNION,WITH,CASE… - 压缩:: 移除多余空格;适用于传输/嵌入。可选配注释移除。
- 关键词大小写:: UPPER, lower 或 Preserve (字符串/标识符保持不变).
- 缩进配置文件:: 2, 4 或 8 Spaces – 在团队内保持一致。.
- 高级:: 移除注释 (单行/多行) & 强制分号.
- 快捷访问:: 预设示例:简单的
SELECT, 带聚合的 JOIN, CASE 与子查询, CTE 与 Window, INSERT … RETURNING, 带 CASE 的 UPDATE, DELETE + EXISTS. - 自测:: 1-Klick-Verifikation: 美化规则、压缩行为、缩进切换、关键字大小写、分号。
- 实用按钮:: 格式化, 在这里测试 JSON-API (POST), 复制, 另存为 .sql.
- 输出:: 结果面板, 自测, - 面板,.
3) 快捷访问示例(用例)
这些示例涵盖最常见的模式,适合作为起点。
1_einfaches_select.sql
SELECT id, name FROM products WHERE status = 'active';
2_join_mit_aggregat.sql
SELECT c.id, c.title, COUNT(p.id) AS products
FROM categories c
LEFT JOIN products p ON p.category_id = c.id
GROUP BY c.id, c.title
ORDER BY products DESC;
3_case_plus_subquery.sql
SELECT u.id, u.email,
CASE
WHEN o.total >= 1000 THEN 'gold'
WHEN o.total >= 200 THEN 'silver'
ELSE 'bronze'
END AS tier
FROM users u
LEFT JOIN LATERAL (
SELECT SUM(total) AS total
FROM orders
WHERE user_id = u.id
) o ON TRUE;
4_cte_plus_window.sql
WITH ranked AS (
SELECT id, customer_id, total,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY total DESC) AS rn
FROM orders
)
SELECT * FROM ranked WHERE rn = 1;
5_insert_returning.sql
INSERT INTO users(email, role)
VALUES ('[email protected]', 'editor')
RETURNING id, email;
6_update_mit_case.sql
UPDATE accounts
SET status = CASE
WHEN balance < 0 THEN 'overdue'
WHEN balance = 0 THEN 'zero'
ELSE 'ok'
END
WHERE active = 1;
7_delete_plus_exists.sql
DELETE FROM sessions s
WHERE EXISTS (
SELECT 1 FROM users u
WHERE u.id = s.user_id AND u.deleted_at IS NOT NULL
);
4) 高级选项(细节与注意事项)
- 移除注释:: 移除
-- ...与/* ... */。适用于“干净”传输(CI、嵌入)。注意:文档注释会丢失——请事先提取/归档。 - 强制分号:: 在末尾没有分号时添加
;,以防止脚本中的解析错误。若已存在;,则不会重复。
5) 典型应用类别(12 种场景)
- 代码评审:: 统一的布局可加速评审,避免风格争论。
- 调试:: 复杂的
JOIN/CASE立即变得直观可见。 - 知识共享:: 便于 Wiki/Confluence/README 的可读 SQL。
- 迁移与脚本:: 分号安全性,唯一块.
- API 嵌入:: 压缩 + 注释移除,将 SQL 嵌入应用/服务中.
- BI/报告:: 在与 BI 工具共享前,清理查询.
- 学习与培训:: CTE/窗口函数按结构化方式显示.
- 重构:: 先美化,再对局部区域进行隔离/优化.
- 错误复现:: 用于支持工单的清晰结构化查询.
- 风格指南执行:: 团队标准(缩进/大小写)的一致应用.
- 模板:: „快捷访问“ 作为新查询的基础.
- 发布准备:: 为稳定、可传输的制品进行压缩。.
6) 集成到网站/Teams
A) 直接使用
前往工具: zerlo.net/formattersql
B) iFrame 集成(内网/后台)
embed_iframe.html
<iframe src="https://zerlo.net/formattersql" title="SQL Formatter" width="100%" height="900" style="border:0; border-radius:12px;"></iframe>
C) 团队风格指南(基础)
- 缩进:2 或 4 个空格(始终如一)。
- 关键字大小写:UPPER(字符串/标识符保持不变)。
- JOINs:条件直接在
JOIN ... ON; 没有隐藏的过滤条件在WHERE. - CASE: CASE:每个
WHEN/THEN在单独的一行中;有意义的; 有意义的ELSE. - 分号:在脚本中始终添加。
7) 可选 JSON-API
你可以在工具/CI/CD 中自动化格式化。一个简洁示例:
api_request.http
POST https://zerlo.net/formattersql?api=1
Content-Type: application/json
{
"sql": "select id,name from users where id=1",
"mode": "beautify",
"options": { "indent": 4, "keywordCase": "upper", "stripComments": false, "ensureSemicolon": true }
}
api_response.json
{
"ok": true,
"result": "SELECT id, name\nFROM users\nWHERE id = 1;",
"stats": { "ms": 4, "inLen": 43, "outLen": 47 }
}
api_node.js
// Node.js (fetch)
const res = await fetch("https://zerlo.net/formattersql?api=1", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
sql: "SELECT * FROM orders WHERE created_at >= NOW() - INTERVAL '7 days';",
mode: "beautify",
options: { indent: 2, keywordCase: "upper", stripComments: true, ensureSemicolon: true }
})
});
const data = await res.json();
console.log(data.result);
api_php.php
<?php
// PHP
$payload = [
"sql" => "SELECT COUNT(*) FROM products;",
"mode" => "minify",
"options" => [ "indent" => 2, "keywordCase" => "preserve", "stripComments" => true, "ensureSemicolon" => true ]
];
$ch = curl_init("https://zerlo.net/formattersql?api=1");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true
]);
$resp = curl_exec($ch);
curl_close($ch);
echo $resp;
8) 自测(逐步)
- 在下面的工具中点击 自测 – – 会自动检查三个核心场景。.
- 美化案例:: Keywords UPPER, 关键字 UPPER、清晰的换行、整洁的缩进。
- 压缩案例:: 移除注释(若该选项启用),输出紧凑。
- 缩进案例:: 可见的 2/4/8 空格切换。.
- 结果将显示在自测窗格中;如有偏差,请检查选项并必要时切换模式。
9) 专业提示、性能与安全
- 大型脚本:: 在“美化”后将其分解为主题块(CTEs、DDL 与 DML),然后单独进行版本控制。.
- 评审节奏:: 将“快捷访问”用作标准模板;避免新查询时的混乱。.
- 最小化错误源:: „强制分号“ 在迁移管道中启用。.
- 字符串保持不变:: 格式化器不会修改引号内的内容;业务逻辑保持安全。.
- 隐私:: 不执行 SQL——纯文本。不要将敏感内容长期存储在第三方工具中。.
- 便于比较:: 先美化,然后用 Git-Diff 比较——差异一眼可见。.
10) Dialekt提示与边界
- MySQL/MariaDB: 标准关键字与函数将被良好识别。.
- PostgreSQL/SQLite: CTEs/Window-Funktionen CTEs/窗口函数将被整齐缩进;
RETURNING值得使用。. - 异常用法:: 非常特殊的方言语法(如专有提示)在内容上保持不变,格式化将以通用方式进行。.
- 没有语义分析:: 格式化器“不理解”逻辑——它对文本进行结构化。语法错误仍然是语法错误。.
11) 故障排除与常见问题
„没有变化?“ – 检查模式与选项;输入不能为空。
„重复的分号?“ – 选项“强制” + 已存在的 ;:禁用该选项。
„未移除注释“ – 启用注释移除或将模式设为“Minify”
„极长的查询在浏览器中卡顿“ – 逐块格式化大型块或使用 API。
„字符串中的关键字被修改了?“ – 不应发生;请检查是否是真正的字符串(引号,而不是反引号)。
12) 现在试用
在此开始: zerlo.net/formattersql