Gマイナー志向

とくに意味はありません

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だそうです。

まとめ

特に無いです。自分用の備忘録です。