1

私はこれを理解するのに問題があります。これは私の質問です:

SELECT * FROM events WHERE date('2012-9-4') >= start_date AND 
date('2012-9-4') <= end_date

上からわかるように、私は何らかの方法でその日に一致する行のみを取得しています。私の場合、その日または前日からのイベント。問題は、たとえば、前日の午後10時から午前12時までのイベント(2012-9-3)が、翌日(2012-9-4)に表示される場合です。だから私はそのような事件が起こらないようにする必要があります。

これは私が問題を抱えているところです。私はそれを正しく行う方法がわかりません。私はさまざまなことを試みましたが、それらはすべて失敗します。where句でステートメントを作成する方法が必要なのはend date > start date、、、、end date == current dayおよびend time == 00:00。どんなアドバイスでも大歓迎です!!

4

2 に答える 2

1

where句の最初の部分を振り返る必要はありませんか

Where start_date >= date ('2012-9-4') and end_date <= date('2012-9-4')

データのend_dateが常にstart_dateよりも遅いと仮定します(そうでない場合は、ORを追加して逆に取得します)。

(Qからここで混乱している)実際に交差する日付(オーバーラップ)が必要な場合は、2つの交差する句が必要です。

where (start_date >= date('2012-09-03 00:00:00') and start_date < date('2012-09-04 00:00:00')) or (end_date >= date('2012-09-03 00:00:00') and end_date < date('2012-09-04 00:00:00'))
于 2012-09-13T02:33:22.033 に答える
0

私はついにそれを理解しました(かなり確かです)!

SELECT * FROM events WHERE date('2012-9-4') >= start_date AND 
date('2012-9-5') <= end_date AND datetime(end_date,end_time) != datetime(2012-9-5,'00:00')

2日間考えた後、なぜ時間の使い方も思いつかなかったのかわかりません。データベースをもっと練習する必要があると思います。いずれにせよ、私が追加した部分は、日付と時刻でリストされたイベントをフィルター処理します。例は私のクエリの日付のようになります。たとえば、4日の午後11時から5日の午前12時までです。基本的には、AND datetime(end_date,end_time) != datetime(2012-9-5,'00:00')「終了日が深夜でない場合にのみ出力する」と述べています。真夜中は技術的には別の日であるため、4日ではなく5日のみが除外されます。これは、イベント期間の間だけでなく、イベントを除外したい唯一のケースです。助けてくれたヒントをくれたWolf5370に感謝します。

于 2012-09-13T04:36:47.560 に答える