2012-04-10 7 views
0

私はこのクエリを実行する奇妙なリターンを得ているに異なる年から日付を比較します:は、MySQL

RRP

id_r | id__b | start | end  | quantity 
27   29  2012-01-01 2012-05-05  1 
31   29  2012-11-01 2013-01-01  1 

EDIT:startend

EDIT dateフィールドです:

$が開始=「2012-12-31」:私は=>間違った結果 日付に曜日を追加する際に問題がZend_Dateから来ていた私のテストのために間違ったデータベースを使用しました; $ nStart =新しいZend_Date($ start、 "YYYY-MM-dd"); $ end = new Zend_Date($ nStart); $ end-> addDay(1);

私は$エンドエコーとき:echo $end->get("YYYY-MM-dd");

を、それは日付がフォーマットされている方法で2013-12-31

+4

されています「終了」は実際に日付フィールドですか?私は、MySQLがデータを変換するときに奇妙なことが起こることがあることを知っていました。 –

+0

はい、間違って申し訳ありません –

+2

あなたの質問に書いたすべてのものが*動作するはずです - [この非常に単純な例を参照](http://www.sqlize.com/s4kzK77qFK)あなたの質問と同じ設定(最後の列だけを使用) – ManseUK

答えて

2

ほとんどの問題を出力

endがある場合はこれが
http://dev.mysql.com/doc/refman/5.0/en/using-date.html

+0

' "2012-12-31"と '2013-01-01'は同じ方法でフォーマットされ、' 2013-01-01'は日付フィールドとして設定されています。私はこの出力を理解できません –

+0

そのような日付フィールドを使用するとシステムによって割り当てられた最後にゼロ点が付いていることがありますが、それは表示されません。たとえば、「20041003 23:00:00」が「20041003」より大きい場合があります。 '20041003'はですは '20041003 00:00:00'に相当します。 –

2

を助けるべきですDATE列には、期待どおりに動作するはずです:

SELECT 
    STR_TO_DATE('2013-01-01', '%Y-%m-%d') < "2012-12-31", 
    STR_TO_DATE('2012-05-05', '%Y-%m-%d') < "2012-12-31" 

...私のボックスに0, 1を返します。

私は考えることができる唯一の可能な欠陥がシステムのデフォルトの日付書式が%Y-%m-%dないということです。

その場合
SELECT @@DATE_FORMAT 

、あなたは形式を毎回指定する必要があります。

SELECT * 
FROM rrp 
WHERE end > STR_TO_DATE('2012-12-31', '%Y-%m-%d')