web-dev-qa-db-ja.com

SQLで日付値を比較するにはどうすればよいですか?

MySQL構文を使用して、次のような行を持つテーブルを作成します。

mydate DATETIME NULL,

次のようなことをする方法はありますか:

... WHERE mydate<='2008-11-25';

私は試していますが、実際には機能していません。

11
fmsf

Nevermindが答えを見つけました。返信したいと思っていた人も同じように回答してください。

WHERE DATEDIFF(mydata,'2008-11-20') >=0;
9
fmsf

あ、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';
19
Eli

標準SQL構文では、以下を使用します。

WHERE mydate <= DATE '2008-11-20'

つまり、キーワードDATEが文字列の前にある必要があります。ただし、DBMSによっては、それほど明示的である必要はありません。システムは、DATE列を文字列に、または文字列をDATE値に自動的に変換します。 DATEが文字列に変換される場合、名目上いくつかの興味深い影響があります-最初のミレニアム(0001-01-01 .. 0999-12-31)に日付があり、先頭のゼロがフォーマットシステム。

7

時間コンポーネントを追加できます

WHERE mydate<='2008-11-25 23:59:59'

しかし、mydateが '2008-11-25 24:59:59'の場合、DST切り替え日に失敗する可能性があるため、次の日付までにすべてを取得するのがおそらく最も安全です。

WHERE mydate < '2008-11-26 00:00:00'
1
too much php

問題は、日付だけでなく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メソッドは、日付部分のみを比較し、時間を無視するため機能します。

0
DancingFool