日向夏特殊応援部隊

俺様向けメモ

SET TIMESTAMP 構文で時刻の固定

SELECT * FROM hidek WHERE created_on < UNIX_TIMESTAMP() - ? ORDER BY created_on ASC LIMIT 100;

とかそういうクエリをテストしたい場合、Fixture の日時が固定値だと色々と不都合がありますね。

そういう時は、http://dev.mysql.com/doc/refman/5.1/ja/set-option.html にある SET 構文の SET TIMESTAMP を使うとセッションごとに UNIX_TIMESTAMP(), NOW() の値を固定出来ます。

root@localhost[test]:14> SET TIMESTAMP = 1302447600;
Query OK, 0 rows affected (0.00 sec)

root@localhost[test]:15> SELECT UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1302447600 |
+------------------+
1 row in set (0.00 sec)

root@localhost[test]:12> SET TIMESTAMP = DEFAULT;
Query OK, 0 rows affected (0.00 sec)

root@localhost[test]:13> SELECT UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1305711386 |
+------------------+
1 row in set (0.00 sec)

こんな感じアル!