SQL 格式化

压成一坨的 SQL 一键排版,按方言处理反引号和方括号,关键字统一大小写。也能反向压成一行,注释会一起去掉。

为什么要按方言格式化

SQL 看着通用,其实各家的词法差别不小:MySQL 用反引号包标识符,SQL Server 用方括号, BigQuery 有数组下标和结构体字段,Hive 和 Spark 的写法又不一样。用正则做格式化, 很容易把 `order` 里的反引号当成字符串开关,之后的整段都被判错。 本页给每种方言配了独立的词法规则,所以格式化之后语法结构不会被改坏。

关键字大小写只是风格问题。多数团队选大写,因为关键字和数据列一眼能分开; 也有团队为了少按 Shift 用小写。统一比选哪个更重要,代码审查时也少一类争论。

压缩的时候要注意什么

压缩会把注释一起删掉。如果是准备提交给同事看的 SQL,建议先格式化再压缩对比一下, 免得把关键的说明删了。压缩主要用在两种场合:把长 SQL 塞进配置文件的一行里, 或者把日志里的多行语句压成一行方便检索。

本页的压缩会保留字符串字面量里的空格和大小写,比如 '北京 上海' 不会被改成 '北京上海',也会正确识别用两个引号表示的转义。

格式化失败怎么办

最常见的原因是括号或引号没配对,报错信息里通常会带上出错的位置。SQL 里有没有分号、 有没有写 schema 前缀一般不影响排版;但少数方言专有语法(比如自定义的运算符) 可能不被识别,这时换「标准 SQL」试试,或者只把出问题的那段单独拿出来格式化。