MySQL:Ver 5.0.21, for pc-linux-gnu (i686) using readline 5.0
OS:Fedora Core 4.0
という環境で、
CREATE TABLE `test_tb` (
`id` int(11) NOT NULL auto_increment,
`i_datetime` datetime NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
というテーブルをつくり、
mysqlプロンプトから次のような検索を行っているのですが、
mysql> SELECT i_datetime FROM test_tb WHERE i_datetime >= '2006-6-1 00:00:00';
+---------------------+
| i_datetime |
+---------------------+
| 2006-06-01 10:14:03 |
| 2006-06-02 15:40:05 |
| 2006-06-04 12:13:54 |
| 2006-06-08 23:04:27 |
| 2006-06-09 01:30:03 |
| 2006-06-10 00:33:36 |
| 2006-06-10 15:28:34 |
| 2006-06-11 16:45:09 |
+---------------------+
8 rows in set (0.00 sec)
mysql> SELECT i_datetime FROM test_tb WHERE DATE(i_datetime) >= '2006-6-1';
Empty set (0.00 sec)
2番目の検索がなぜEmptyになるのか分かりません
どなたか分かる方がいらっしゃったら、教えてください
はずしていたら、すみません。
2番目の式
WHERE DATE(i_datetime) >= '2006-6-1';
#こちらは、DATE(i_datetime)は'2006-06-01'という風にゼロ詰めで比較されていると思います。
#ですので、emptyになってしまうのではないでしょうか?
MySQLリファレンスより
DATE(expr)
日付式または日付時刻式 expr の日付部分を取り出す。
mysql> SELECT DATE('2003-02-09 01:02:03');
-> '2003-02-09'
1番目の式で、datetime型と文字列を比較するのは、ちょっと不安です。
次のように、DATE_FORMATで書式設定してから比較してはいかがでしょうか?
WHERE DATE_FORMAT(i_datetime,'%Y-%m-%d') >= '2006-06-01';