MySQLの日付比較
MySQLの日付周りを甘く見てたら、ハマった。
column BETWEEN A AND B
イコール
A <=column and column <=B
なので、以下のSQLの結果は同一かと思ったが、違った。。。
mysql> select '2010-07-26 00:00:00' BETWEEN '2010-07-25' AND '2010-07-26'; +-------------------------------------------------------------+ | '2010-07-26 00:00:00' BETWEEN '2010-07-25' AND '2010-07-26' | +-------------------------------------------------------------+ | 0 | +-------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select '2010-07-26' BETWEEN '2010-07-25' AND '2010-07-26'; +----------------------------------------------------+ | '2010-07-26' BETWEEN '2010-07-25' AND '2010-07-26' | +----------------------------------------------------+ | 1 | +----------------------------------------------------+ 1 row in set (0.01 sec)
なぜかというと、ただのクウォートだと文字として比較してしまうから。
比較対象のカラムは型を意識しなければならない。
mysql> SELECT CAST('2010-07-26 00:00:00' AS DATETIME) BETWEEN '2010-07-25' AND '2010-07-26';
+-------------------------------------------------------------------------------+
| CAST('2010-07-26 00:00:00' AS DATETIME) BETWEEN '2010-07-25' AND '2010-07-26' |
+-------------------------------------------------------------------------------+
| 1 |
+-------------------------------------------------------------------------------+
1 row in set (0.00 sec)
range指定は対象カラムの型に自動変換されるみたい。
| 印刷 | この記事は Yuki Matsukura によって 2010/7/27 火曜日 16:44:10 に投稿されました, MySQL 以下に保存されています。 RSS 2.0 を通してコメントをフォローする。 コメントを残すか、ご自分のサイトからトラックバックできます。 |

