2022年4月9日土曜日

SQLite3 位置を指定して出力結果を改行する(--wrap)

概要

ひとつのカラムに長いテキスト等が入っていると、 コマンドラインツールでは表示が横に伸びて見づらくなってしまう。

.modeコマンドに--wrapオプションを指定することで カラム内のデータを改行させることができる。

--wrapオプションはバージョン3.38.0より利用可能。

構文


.mode ?mode_name? --wrap N
                

実行例

  1. カラムの幅を10に変更する
  2. カラムの幅を2に変更する
    ヘッダを表示している場合、ヘッダは改行されないので注意する。
  3. デフォルトのカラム幅に戻す

sqlite> -- # 1.
sqlite> .headers on
sqlite> .mode box
sqlite> select * from sample;
┌──────┬───────────┬──────────────────┐
│  id  │   name    │       mail       │
├──────┼───────────┼──────────────────┤
│ 1111 │ name_1111 │ 1111@example.com │
│ 2222 │ name_2222 │ 2222@example.com │
└──────┴───────────┴──────────────────┘

sqlite> -- # 2.
sqlite> .mode box --wrap 10
sqlite> select * from sample;
┌──────┬───────────┬────────────┐
│  id  │   name    │    mail    │
├──────┼───────────┼────────────┤
│ 1111 │ name_1111 │ 1111@examp │
│      │           │ le.com     │
├──────┼───────────┼────────────┤
│ 2222 │ name_2222 │ 2222@examp │
│      │           │ le.com     │
└──────┴───────────┴────────────┘

sqlite> -- # 3.
sqlite> .mode box --wrap 2
sqlite> select * from sample;
┌────┬────┬────┐
│ id │ na │ ma │
├────┼────┼────┤
│ 11 │ na │ 11 │
│ 11 │ me │ 11 │
│    │ _1 │ @e │
│    │ 11 │ xa │
│    │ 1  │ mp │
│    │    │ le │
│    │    │ .c │
│    │    │ om │
├────┼────┼────┤
│ 22 │ na │ 22 │
│ 22 │ me │ 22 │
│    │ _2 │ @e │
│    │ 22 │ xa │
│    │ 2  │ mp │
│    │    │ le │
│    │    │ .c │
│    │    │ om │
└────┴────┴────┘

sqlite> -- # 4.
sqlite> .mode box
sqlite> select * from sample;
┌──────┬───────────┬──────────────────┐
│  id  │   name    │       mail       │
├──────┼───────────┼──────────────────┤
│ 1111 │ name_1111 │ 1111@example.com │
│ 2222 │ name_2222 │ 2222@example.com │
└──────┴───────────┴──────────────────┘
                
「.width」コマンドと組み合わせる

--wrapオプションを使うと全てのカラムの幅が変更されてしまうが、 .width コマンドを使用することでカラム幅をある程度コントロール出来る。


sqlite> .mode box --wrap 5
sqlite> select * from sample;
┌──────┬───────┬───────┐
│  id  │ name  │ mail  │
├──────┼───────┼───────┤
│ 1111 │ name_ │ 1111@ │
│      │ 1111  │ examp │
│      │       │ le.co │
│      │       │ m     │
├──────┼───────┼───────┤
│ 2222 │ name_ │ 2222@ │
│      │ 2222  │ examp │
│      │       │ le.co │
│      │       │ m     │
└──────┴───────┴───────┘

sqlite> .width 4 5 10
sqlite> select * from sample;
┌──────┬───────┬────────────┐
│  id  │ name  │    mail    │
├──────┼───────┼────────────┤
│ 1111 │ name_ │ 1111@examp │
│      │ 1111  │ le.com     │
├──────┼───────┼────────────┤
│ 2222 │ name_ │ 2222@examp │
│      │ 2222  │ le.com     │
└──────┴───────┴────────────┘
                

日本語は ずれてしまう

日本語に限らずマルチバイト文字は以下の実行例のように見た目が崩れてしまう。 これは諦めるしかない。


sqlite> .mode box --wrap 5
sqlite> select * from sample;
┌────┬───────┬───────┐
│ id │ name  │ mail  │
├────┼───────┼───────┤
│ 1  │ test_ │ 1111@ │
│    │ 1111  │ examp │
│    │       │ le.co │
│    │       │ m     │
├────┼───────┼───────┤
│ 2  │ 吾輩は猫で │ 2222@ │
│    │ ある。名前 │ examp │
│    │ はまだない │ le.co │
│    │       │ m     │
└────┴───────┴───────┘
                

参考URL