SQL 格式化器
粘贴从日志或 ORM 中复制的一行SQL语句后,格式化工具会将其拆分为带有统一关键词大小写、在SELECT、FROM、WHERE、GROUP BY前添加换行符以及投影中对齐列的缩进子句。支持MySQL、PostgreSQL、SQLServer、Oracle、SQLite和BigQuery等数据库方言,各方言的关键词及保留字略有差异。
格式设置的工作原理
-
1
粘贴您的 SQL 语句
单行数据块、Hibernate生成的精简输出结果等。所有由 `;` 分隔的多条语句均已完成格式化。
-
2
选择方言和风格
方言控制关键词列表;样式控制逗号位置(前置或后置)、缩进宽度以及大写/小写字母关键词的使用。
-
3
令牌被解析,而非用正则表达式替换
分词器能正确处理字符串、注释、括号及子查询。字符串字面值均保持原样。
-
4
复制格式化的输出
经过验证的SQL语句,具有相同的语义,且格式更整洁。
之前与之后
之前:
SELECT u.id,u.name,COUNT(o.id) AS orders FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at>='2024-01-01' GROUP BY u.id,u.name HAVING COUNT(o.id)>5 ORDER BY orders DESC LIMIT 50;
(使用前逗号、大写关键词及两倍缩进):
SELECT
u.id
, u.name
, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o
ON o.user_id = u.id
WHERE u.created_at >= '2024-01-01'
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5
ORDER BY orders DESC
LIMIT 50;
关键样式选择
- 大写与小写字母的关键词。 大写字母更传统且易于扫描;小写字母在具备语法高亮功能的现代代码编辑器中更为美观。
- 前导逗号与后置逗号的区别。 前导逗号(
, col)便于对单列进行注释;后置逗号(col,)在文本中读起来更为自然。 GROUP BY中的逗号使用规范:长语句通常每行一个逗号,短语则采用内联格式。- JOIN 缩进。 将
ON置于下一行(悬挂缩进)还是同一行:较长的条件更适合采用悬挂缩进。 - 子查询。 需缩进整个子查询,而不仅仅是开头的括号部分。
不同方言特有的陷阱
- MySQL 使用反引号,而 PostgreSQL 使用双引号来标识标识符。
WITHCTEs,MS SQL 在要求WITH之前还需满足;;格式化器可处理该要求。- 窗口函数,较长的
OVER (...)子句可从采用换行格式的PARTITION BY和ORDER BY中获益。 - BigQuery 中包含
ARRAY_AGG、STRUCT以及表格后缀(*_yyyymmdd),分词器不得破坏这些格式。 - Oracle 支持
(+)外连接语法,格式化工具会保留该语法,但将其标记为旧版语法。
格式化器未执行的操作
- 修复漏洞:无效的 JOIN 操作将始终保持无效状态。
- 展开
SELECT *,列列表并非根据数据模式推导得出。 - 优化查询,仅优化查询结构,不涉及执行计划。
- 将子查询重写为CTE,这属于另一个问题。
常见问题
不,这纯粹是外观上的调整。空白、换行符和逗号的位置可能会有所变动,但关键词、运算符、字面量及标识符均保持完全一致。
支持的触发器包括:CREATE TABLE、ALTER、CREATE PROCEDURE。格式化器可处理过程内的块结构(BEGIN ... END)及行延续内容。
不应出现此问题,若确实发生,则很可能是方言不匹配所致。请尝试更换方言。如遇到持续故障,请报告;我们将将其视为错误。
Flink SQL与Cassandra CQL 界面相似,但存在特定方言专用的关键词,主流格式化工具常会将其扭曲。使用时需谨慎,并验证输出结果是否正确运行。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
证书解码器
粘贴一张 X.509 PEM 证书,并查看解码后的字段:主体、颁发者、序列号、签名算法、有效期及主体备用名称(SAN)。
HTML到文本转换器
从标记中剔除所有HTML标签及元素,生成适用于电子邮件客户端、数据分析及索引处理的纯文本格式。
IBAN 验证工具
在本地检查 IBAN 的注册国家长度、国内结构和 MOD 97-10 校验位。不上传数据,也不表示账户真实存在。
此工具还提供其他语言版本
- รูปแบบ SQL [TH]
- Formater SQL [PL]
- Định dạng SQL [VI]
- SQL-Formatter [DE]
- Format SQL [ID]
- SQLフォーマッター [JA]
- Formateador SQL [ES]
- SQL 포매터 [KO]
- Formatador SQL [PT]
- SQL-formaterare [SV]
- Formateur SQL [FR]
- تنسيق SQL [AR]
- SQL-formatter [NL]
- Форматтер SQL [RU]
- SQL Biçimlendirici [TR]
- SQL Formatter [EN]
- Formatter SQL [IT]