SQLiteのコマンドラインでSELECTした結果を見やすくする

SQLiteコマンドラインでSELECTを発行した結果表示が見にくいので、見やすくしてみる。


環境;
CentOS 6.5
SQLite 3.6.20


まずはテストDBを作成。

$ sqlite3 test.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE sample (id integer, name text);
sqlite> INSERT INTO sample (id, name) VALUES (1, 'user1');
sqlite> INSERT INTO sample (id, name) VALUES (2, 'user2');

デフォルトの状態でSELECTしてみる。

sqlite> SELECT * FROM sample;
1|user1
2|user2

この結果表示が分かりにくい。


まず列名を表示する。

sqlite> .header on
sqlite> SELECT * FROM sample;
id|name
1|user1
2|user2


modeを変更して、カラムを区切って表示する。

sqlite> .mode column
sqlite> SELECT * FROM sample;
id          name
----------  ----------
1           user1
2           user2

いくつかあるmodeの中では、これが見やすいと思う。


毎回設定するのが面倒な場合は、~/.sqliterc に記載しておくと、sqlite実行時に設定が読み込まれる。

$ cat ~/.sqliterc
.header on
.mode column


mode には、以下の種類がある。デフォルトは list。

csv      Comma-separated values
column   Left-aligned columns.  (See .width)
html     HTML <table> code
insert   SQL insert statements for TABLE
line     One value per line
list     Values delimited by .separator string
tabs     Tab-separated values
tcl      TCL list elements


CSVの場合

sqlite> .mode csv
sqlite> SELECT * FROM sample;
id,name
1,user1
2,user2

htmlの場合

sqlite> .mode html
sqlite> SELECT * FROM sample;
<TR><TH>id</TH>
<TH>name</TH>
</TR>
<TR><TD>1</TD>
<TD>user1</TD>
</TR>
<TR><TD>2</TD>
<TD>user2</TD>
</TR>

insertの場合

sqlite> .mode insert
sqlite> SELECT * FROM sample;
INSERT INTO table VALUES(1,'user1');
INSERT INTO table VALUES(2,'user2');

lineの場合

sqlite> .mode line
sqlite> SELECT * FROM sample;
   id = 1
 name = user1

   id = 2
 name = user2

tabsの場合

sqlite> .mode tabs
sqlite> SELECT * FROM sample;
id      name
1       user1
2       user2

tclの場合

sqlite> .mode tcl
sqlite> SELECT * FROM sample;
"id"    "name"
"1"     "user1"
"2"     "user2"