百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
S

sql-formatter

> 数据库
开源

用于不同查询语言的空格格式化器

2.9K stars0 点赞0 次浏览
访问官网GitHub

工具介绍

用于不同查询语言的空格格式化器

SQL Formatter

SQL Formatter is a JavaScript library for pretty-printing SQL queries.

It started as a port of a PHP Library, but has since considerably diverged.

It supports various SQL dialects: GCP BigQuery, Clickhouse, IBM DB2, DuckDB, Apache Hive, MariaDB, MySQL, TiDB, Couchbase N1QL, Oracle PL/SQL, PostgreSQL, Amazon Redshift, SingleStoreDB, Snowflake, Spark, SQL Server Transact-SQL, Trino (and Presto). See language option docs for more details.

It does not support:

  • Stored procedures.
  • Changing of the delimiter type to something else than ;.

→ Try the demo.

Install

Get the latest version using your package manager of choice:

npm install sql-formatter # or yarn, pnpm, bun, etc

Usage

Usage as library

import { format } from 'sql-formatter';

console.log(format('SELECT * FROM tbl', { language: 'mysql' }));

This will output:

SELECT
  *
FROM
  tbl

You can also pass in configuration options:

format('SELECT * FROM tbl', {
  language: 'spark',
  tabWidth: 2,
  keywordCase: 'upper',
  linesBetweenQueries: 2,
});

Disabling the formatter

You can disable the formatter for a section of SQL by surrounding it with disable/enable comments:

/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT * FROM tbl2;

which produces:

/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT
  *
FROM
  tbl2;

The formatter doesn't even parse the code between these comments. So in case there's some SQL that happens to crash SQL Formatter, you can comment the culprit out (at least until the issue gets fixed in SQL Formatter).

Placeholders replacement

In addition to formatting, this library can also perform placeholder replacement in prepared SQL statements:

format('SELECT * FROM tbl WHERE foo = ?', {
  params: ["'bar'"],
});

Results in:

SELECT
  *
FROM
  tbl
WHERE
  foo = 'bar'

For more details see docs of params option.

Usage from command line

The CLI tool will be installed under sql-formatter and may be invoked via npx sql-formatter:

sql-formatter -h
…

By default, the tool takes queries from stdin and processes them to stdout but one can also name an input file name or use the --output option.

echo 'select * from tbl where id = 3' | sql-formatter
select
  *
from
  tbl
where
  id = 3

The tool also accepts a JSON config file named .sql-formatter.json in the current or any parent directory, or with the --config option that takes this form:

{
  "language": "spark",
  "tabWidth": 2,
  "keywordCase": "upper",
  "linesBetweenQueries": 2
}

All fields are optional and all fields that are not specified will be filled with their default values.

Configuration options

  • language the SQL dialect to use (when using format()).
  • dialect the SQL dialect to use (when using formatDialect() since version 12).
  • tabWidth amount of indentation to use.
  • useTabs to use tabs for indentation.
  • keywordCase uppercases or lowercases keywords.
  • dataTypeCase uppercases or lowercases data types.
  • functionCase uppercases or lowercases function names.
  • identifierCase uppercases or lowercases identifiers. (experimental!)
  • indentStyle defines overall indentation style. (deprecated!)
  • logicalOperatorNewline newline before or after boolean operator (AND, OR, XOR).
  • expressionWidth maximum number of characters in parenthesized expressions to be kept on single line.
  • linesBetweenQueries how many newlines to insert between queries.
  • denseOperators packs operators densely without spaces.
  • newlineBeforeSemicolon places semicolon on separate line.
  • params collection of values for placeholder replacement.
  • paramTypes specifies parameter placeholders types to support.

Usage without NPM

If you don't use a module bundler, clone the repository, run npm install and grab a file from /dist directory to use inside a <script> tag. This makes SQL Formatter available as a global variable window.sqlFormatter.

Usage in editors

  • VSCode extension
    • Repo
  • Vim extension
  • Prettier plugin

We provide JSON Schema for .sql-formatter.json configuration file, enabling autocompletion and IntelliSense support in editors.

  • JSON Schema link
  • Usage Guides:
    • Using the schema in VSCode
    • Using the schema in Zed

Usage as ESLint plugin

  • Inside eslint-plugin-sql by using the rule eslint-plugin-sql#format.

Frequently Asked Questions

Parse error: Unexpected ... at line ...

The most common cause is that you haven't specified an SQL dialect. Instead of calling the library simply:

format('select [col] from tbl');
// Throws: Parse error: Unexpected "[col] from" at line 1 column 8

pick the proper dialect, like:

format('select [col] from tbl', { language: 'transactsql' });

Or when using the VSCode extension: Settings -> SQL-Formatter-VSCode -> Dialect.

Module parse failed: Unexpected token

This typically happens when bundling an application with Webpack. The cause is that Babel (through babel-loader) is not configured to support class properties syntax:

    | export default class ExpressionFormatter {
    >   inline = false;

This syntax is widely supported in all major browsers (except old IE) and support for it is included to the default @babel/preset-env.

Possible fixes:

  • Update to newer Babel / Webpack
  • Switch to @babel/preset-env
  • Include plugin @babel/plugin-proposal-class-properties

I'm having a problem with Prettier SQL VSCode extension

The Prettier SQL VSCode extension is no more maintained by its author.

Please use the official SQL Formatter VSCode extension to get the latest fixes from SQL Formatter library.

My SQL contains templating syntax which SQL Formatter fails to parse

For example, you might have an SQL like:

SELECT {col1}, {col2} FROM {tablename}

While templating is not directly supported by SQL Formatter, the workaround is to use paramTypes config option to treat these occurrences of templating constructs as prepared-statement parameter-placeholders:

format('SELECT {col1}, {col2} FROM {tablename};', {
  paramTypes: { custom: [{ regex: String.raw`\{\w+\}` }] },
});

This won't work for all possible templating constructs, but should solve the most common use cases.

The future

The development of this formatter is currently in maintenance mode. Bugs will get fixed if feasible, but new features will likely not be added.

I have started a new SQL formatting tool: prettier-plugin-sql-cst.

  • It solves several problems which can't be fixed in SQL Formatter because of fundamental problems in its architecture.
  • It makes use of the Prettier layout algorithm, doing a better job of splitting long expressions to multiple lines.
  • It takes much more opinionated approach to SQL formatting, giving only a very limited set of options to adjust the code style.
  • It already has full support for SQLite and BigQuery syntax. It should work for the most common SQL code in various other dialects.

Give it a try if you'd like to take your SQL auto-formatting to the next level.

Contributing

Please see CONTRIBUTING.md

License

MIT

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

TypeScriptformatterjavascriptn1qlsql

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类数据库
定价开源

> 相关工具

P
PostgreSQL
功能强大的开源关系型数据库
R
Redis
内存数据结构存储,常用作缓存与队列
M
MySQL
广泛使用的开源关系型数据库