MySQL構文を使用して、次のような行を持つテーブルを作成します。
mydate DATETIME NULL,
次のようなことをする方法はありますか:
... WHERE mydate<='2008-11-25';
私は試していますが、実際には機能していません。
Nevermindが答えを見つけました。返信したいと思っていた人も同じように回答してください。
WHERE DATEDIFF(mydata,'2008-11-20') >=0;
あ、WHERE mydate<='2008-11-25'
isそれを行う方法。うまくいくはずです。
エラーメッセージが表示されますか? MySQLの古いバージョンを使用していますか?
編集:MySQL 5.xでは次のように動作します
create temporary table foo(d datetime);
insert into foo(d) VALUES ('2000-01-01');
insert into foo(d) VALUES ('2001-01-01');
select * from foo where d <= '2000-06-01';
標準SQL構文では、以下を使用します。
WHERE mydate <= DATE '2008-11-20'
つまり、キーワードDATEが文字列の前にある必要があります。ただし、DBMSによっては、それほど明示的である必要はありません。システムは、DATE列を文字列に、または文字列をDATE値に自動的に変換します。 DATEが文字列に変換される場合、名目上いくつかの興味深い影響があります-最初のミレニアム(0001-01-01 .. 0999-12-31)に日付があり、先頭のゼロがフォーマットシステム。
時間コンポーネントを追加できます
WHERE mydate<='2008-11-25 23:59:59'
しかし、mydateが '2008-11-25 24:59:59'の場合、DST切り替え日に失敗する可能性があるため、次の日付までにすべてを取得するのがおそらく最も安全です。
WHERE mydate < '2008-11-26 00:00:00'
問題は、日付だけでなくDATETIMEデータを処理していることです。行に '2008-11-25 09:30 AM'のmydateがある場合、WHERE mydate <= '2008-11-25';はその行を返しません。 '2008-11-25'の暗黙の時間は00:00(真夜中)であるため、日付の部分は同じであるにもかかわらず、それらは等しくなく、mydateの方が大きくなっています。
<= '2008-11-25'の代わりに<'2008-11-26'を使用すると、それは機能します。 Datediffメソッドは、日付部分のみを比較し、時間を無視するため機能します。