2017-10-27 4 views
-1

私はこの問題を解決しようとしています。しかし、私は日付、重複する日付、どんなことでも作業が難しいです。イベントのクエリが2007年3月に行われました

I 3月に起こったすべてのイベントを取得したいと思い

、2007年

マイイベント表:

  • ID
  • start_dateの
  • END_DATE

私は試しています:

SELECT * 
FROM events 
WHERE (MONTH(start_date)<=3 AND 
     YEAR(start_date)<=2007) AND (YEAR(end_date)>=2007 AND 
     MONTH(end_date)>=3) 

私を助けてくれますか?

+0

秒とは明らかに間違って見えます:あなたは、その後、月にのみをしているイベントがしたい場合

。 –

+0

あなたが使用しているRDBMSを最初に見つけ出す – Strawberry

+0

"私は難しい"は、観察された動作についての情報をほとんど伝えていません。エラーが返されますか?クエリがハングしていて、決して終了していませんか?予期しない結果セットを返していますか?行が欠落しているか、行が多すぎます。 SQLクエリについて質問する際に非常に重要なのは、参照される列の*データ型*です。 "手伝って頂けますか?"また、この問題に関する多くの有益な情報を提供していません。仕様を明確にし、実際の質問をする方法として、サンプルデータと期待される出力を提供することを検討してください。 – spencer7593

答えて

5

通常は、あなたが使用します。

where start_date < '2007-04-01' and end_date >= '2007-03-01' 

これは、月中のアクティブなすべてのイベントを提供します。

where start_date >= '2007-03-01' and end_date < '2007-04-01' 
+0

+10これは、start_date列とend_date列がDATE、DATETIME、またはTIMESTAMPデータ型であることを前提としています。この形式は、正規のISO形式 'YYYY-MM-DD'で始まる(文字列の比較は日付の比較と同じように)、最初に格納される文字列型に対しても機能します。* bare *列の述語は、適切なインデックス(パフォーマンスの優位性)に対する操作のスキャンと、MySQLがインデックスを有効に使用できないようにする関数の列をラップすること。 – spencer7593

+0

ありがとう、男! – ComplexityAlg