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
などしてやる。