SQL格式化
按嵌套层级缩进查询,把关键字统一成一种大小写,或者把整条语句压成一行写进日志,支持十五种方言。
把文件拖到这里
.sql, .txt · 最大10 MB
如何格式化SQL
- 1
拖入.sql文件
添加包含查询的文件。读取和改写都在这个浏览器标签页里完成,不会发送到任何地方。
- 2
选择方言和大小写风格
从十五种方言中选一种,分别设置关键字和标识符的大小写,选择缩进宽度,再决定AND和OR放在行首还是行尾。
- 3
下载格式化后的查询
把结果保存为.sql文件,文件名沿用原文件。
按词法单元处理,而不是正则表达式
输出任何内容之前,查询会先切分成字符串字面量、带引号的标识符、注释、数字和单词,这正是格式化工具和巧妙的查找替换之间的区别。内容为'-- not a comment'的字面量会保留它的短横线,不会丢掉半行;'a b'里的三个空格也仍是三个空格,因为在字面量里,每个字符都是数据库要拿来比较的数据。
只排版,不检查
这里的关键字识别是一套共用词表加上各方言的补充,不是十五套完整的语法,所以工具负责安排缩进和换行,而不是告诉你语句是否有效。这一点仍要以你的数据库为准。括号或引号不配对也不会阻止输出:你会看到带行号的警告,同时照样得到格式化后的结果,因为缺了一个括号往往正是你来这里的原因。
压缩成一行,放进代码所在的地方
压缩功能把一条语句放到一行里,用作配置值、日志条目或应用代码里的字符串。空白只在字面量之外合并,相邻单词之间始终保留一个空格,所以不会有任何内容粘在一起。
查询留在你的电脑上
读取文件、切分词法单元和输出结果都在这个浏览器标签页里完成。没有任何内容上传,也不保存任何东西。查询里常带有表名、表结构细节或硬编码的值,这些内容你不会想粘贴到别人的网页表单里,所以这一点很重要。
常见问题
支持哪些SQL方言?
十五种:标准SQL、MySQL、MariaDB、PostgreSQL、DB2、PL/SQL、N1QL、Redshift、Spark、SQLite、T-SQL、BigQuery、Snowflake、Trino和SingleStoreDB。所选方言决定哪些词按关键字处理,以及在哪里换行。
它能检查SQL语句写得对不对吗?
不能,它也不这样宣称。关键字列表是一个通用核心加上各方言的补充,而不是每种数据库引擎的完整语法,所以工具只对你给的内容做缩进和换行,不判断是否有效。格式化一条陌生的查询仍然有用,因为嵌套结构排开之后,位置不对的子句就一目了然。
括号不配对的警告是什么意思?
工具统计了括号和引号,发现它们没有成对。你会看到第一处不匹配所在的行号,查询照样会格式化。在那一处之前,把排版结果当作最合理的推测;它通常能显示括号是在哪里漏掉的。
压缩和格式化有什么区别?
格式化把语句分成多行,按嵌套层级缩进,方便阅读和审查。压缩正好相反,把语句合并成一行,好放进配置文件、日志行或字符串常量里。
注释会保留吗?
默认保留,双短横线注释和块注释都保留,并按新的排版调整位置。另有一个开关可以删除注释;它基于词法单元工作,所以只是看起来像注释的字面量不会受影响。
能一次格式化多条语句吗?
能。用分号分隔的语句会逐条格式化,语句之间空几行由你选择,从零到五行。结果里会显示找到了多少条语句。
为什么嵌套很深的查询被拒绝了?
括号嵌套超过二十层后,输出就没人能看懂了,而且这么深的嵌套几乎总是意味着某个括号没有闭合。与其输出一段没法用的“阶梯”,工具会直接告诉你原因。
有大小限制吗?会上传什么吗?
每条查询最多五百万个字符,远远超过任何手写的语句。无论多大都不会上传:整个过程在你的浏览器里本地运行,不经过服务器,也不需要账号。