SQLの実行結果を1カラム1行で表示する方法
例えば次のようなテーブルがあって、
CREATE TABLE testtable ( id INTEGER NOT NULL, title VARCHAR(10) NOT NULL, body TEXT NOT NULL, created TIMESTAMP NOT NULL, PRIMARY KEY (id) );
普通にSELECTするとカラムが横並びで値が表示されます。ここではMySQLの例。
mysql> INSERT INTO testtable (id, title, body, created) VALUES (1, 'test', 'hello hello', CURRENT_TIMESTAMP); mysql> SELECT * FROM testtable WHERE id = 1; +----+-------+-------------+---------------------+ | id | title | body | created | +----+-------+-------------+---------------------+ | 1 | test | hello hello | 2012-03-02 22:55:14 | +----+-------+-------------+---------------------+ 1 row in set (0.02 sec)
これぐらいのカラム数ならまだいいんですが、カラムが増えると非常に見づらい。
で、各カラムを1行づつ表示するオプションを調べました。
MySQLの場合
mysql> INSERT INTO testtable (id, title, body, created) VALUES (1, 'test', 'hello hello', CURRENT_TIMESTAMP); mysql> SELECT * FROM testtable WHERE id = 1\G *************************** 1. row *************************** id: 1 title: test body: hello hello created: 2012-03-02 22:55:14 1 row in set (0.00 sec)
セミコロンのかわりに\Gだそうです。なんじゃそりゃ。
PostgreSQLの場合
=> INSERT INTO testtable (id, title, body, created) VALUES (1, 'test', 'hello hello', CURRENT_TIMESTAMP); => \x on 拡張表示は on です。 => SELECT * FROM testtable WHERE id = 1; -[ RECORD 1 ]----------------------- id | 1 title | test body | hello hello created | 2012-03-02 22:59:00.887797
\x onだそうです。
SQLiteの場合
sqlite> INSERT INTO testtable (id, title, body, created) VALUES (1, 'test', 'hello hello', DATETIME('now')); sqlite> .mode line sqlite> SELECT * FROM testtable WHERE id = 1; id = 1 title = test body = hello hello created = 2012-03-02 14:05:17
.mode lineだそうです。
まとめ
特に無いです。自分用の備忘録です。