LoginSignup
9

More than 3 years have passed since last update.

JavascriptでSQL整形マクロを作る

Last updated at Posted at 2019-03-31

はじめに

「ログに出力されたSQLを整形したいけど整形ツールが手元にない」、「社用PCだからダウンロードも勝手にできない」、ってことがよくあったので簡易的な整形ツールを作りました。
ただキーワードの前後で改行するだけのツールです。
インデント調整とか高度なことはできないです。

作った関数

formatSql.js
function formatSql(text){
  // 改行するキーワード
  var array=["AND","FROM","FULL","GROUP","INNER","LEFT","ON","ORDER","RIGHT","SET","WHERE","VALUES"];

  // キーワード共通処理
  for(i=0; i<array.length; i++){
    var keyword = array[i];
    var after = " " + keyword + " ";

    // キーワード前後の半角スペースを1つだけにする
    text = text.replace(new RegExp(" +" + keyword + " +", "g"), after);

    // この時点でキーワード"   AND  "は" AND "になる

    // 改行する
    var afterRn = "\r\n" + after;
    text = text.replace(new RegExp(after, "g"), afterRn);
  }

  // SELECT:後ろ改行
  text = text.replace(/SELECT/g, "SELECT\r\n");

  // カンマ:前後のスペース削除
  text = text.replace(/( +,|, +| +, +)/g, ",");
  // カンマ:改行(前カンマ)
  text = text.replace(/,/g, "\r\n , ");

  // かっこ:改行
  text = text.replace(/\(/g, "(\r\n");
  text = text.replace(/\)/g, "\r\n)\r\n");

  return text;
}

使い方

  • サクラエディタの場合
  • ブラウザの場合

サクラエディタの場合

  1. 以下のスクリプトを共通設定のマクロに設定する。
  2. 整形したい文字列を選択する。
  3. ツールの登録済みマクロから設定したマクロを選択する。
formatSql.js
function formatSql(text){
// 省略
}

var text = Editor.GetSelectedString(0);
if ( text !== "" ) Editor.InsText(formatSql(text));

ショートカットキーに登録するのもいいですね。

ブラウザの場合

  1. scriptタグに追加する。
  2. ブラウザで開いてリロードする。
formatSql.html
<script type="text/javascript">
function formatSql(text){
// 省略
}

var text="SELECT id , name FROM table1 WHERE key = ?";
text = formatSq(text);
document.write(text);
</script>

入力用テキストボックスを設けるのもいいですね。

あとがき

以下の記事の一部だったものです。
コードが汚かったので改良しました。
新しい現場に入ったときメモ

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
9