LoginSignup
11
13

More than 5 years have passed since last update.

sql-formatterでSQLを整形する

Last updated at Posted at 2015-12-05

sql-formatterというPHP製のフォーマッターがあり、コマンドラインからも使える。

composerでインストールするためにまず、composerをインストールする1
例えば、$HOME/binにインストールしたい場合は以下のとおり。

$ curl -sS https://getcomposer.org/installer | php -d detect_unicode=Off -- --install-dir=$HOME/bin --filename=composer

次にcomposerでsql-formatterをCOMPOSER_HOME(デフォルトでは$HOME/.composer)にインストールする2
最新のをインストールするためにdev-masterを指定する。

$ composer global require jdorn/sql-formatter:dev-master

PATHを設定する

$ export PATH="$HOME/.composer/vendor/bin:$PATH"

sql-formatterの引数または標準入力にSQL文を渡すとフォーマットされる。

$ sql-formatter "SELECT DATE_FORMAT(b.t_create, '%Y-%c-%d') dateID, b.title memo
    FROM (SELECT id FROM orc_scheme_detail d WHERE d.business=208
    AND d.type IN (29,30,31,321,33,34,3542,361,327,38,39,40,41,42,431,4422,415,4546,47,48,'a',
    29,30,31,321,33,34,3542,361,327,38,39,40,41,42,431,4422,415,4546,47,48,'a')
    AND d.title IS NOT NULL AND t_create >=
    DATE_FORMAT((DATE_SUB(NOW(),INTERVAL 1 DAY)),'%Y-%c-%d') AND t_create
    < DATE_FORMAT(NOW(), '%Y-%c-%d') ORDER BY d.id LIMIT 2,10) a,
    orc_scheme_detail b WHERE a.id = b.id"
SELECT
  DATE_FORMAT(b.t_create, '%Y-%c-%d') dateID,
  b.title memo
FROM
  (
    SELECT
      id
    FROM
      orc_scheme_detail d
    WHERE
      d.business = 208
      AND d.type IN (
        29, 30, 31, 321, 33, 34, 3542, 361, 327,
        38, 39, 40, 41, 42, 431, 4422, 415, 4546,
        47, 48, 'a', 29, 30, 31, 321, 33, 34, 3542,
        361, 327, 38, 39, 40, 41, 42, 431, 4422,
        415, 4546, 47, 48, 'a'
      )
      AND d.title IS NOT NULL
      AND t_create >= DATE_FORMAT(
        (
          DATE_SUB(NOW(), INTERVAL 1 DAY)
        ),
        '%Y-%c-%d'
      )
      AND t_create < DATE_FORMAT(NOW(), '%Y-%c-%d')
    ORDER BY
      d.id
    LIMIT
      2, 10
  ) a,
  orc_scheme_detail b
WHERE
  a.id = b.id

vim上でgqオペレータを使って整形をしたい場合は、~/.vim/ftplugin/sql.vim

~/.vim/ftplugin/sql.vim
setlocal formatexpr=
setlocal formatprg=sql-formatter

と書いておいて、全体を整形したい場合はgggqG、ビジュアルモードで選択した部分だけ整形したい場合は該当箇所を選択してgqなどしてやる。

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13