5

イベント テーブルに startDate と endDate の 2 つの列 (日時の両方) があります。date()phpの関数を使って当日を取得しています。

これは、たとえば 2013-03-12 になります。

今日発生する日付と組み合わされたイベントには、次の 3 つの可能性があります。

  1. イベントはこの日に開始および終了します
  2. イベントが以前に開始され、今日終了しました
  3. イベントは今日開始され、将来終了します (>= 2013-03-13)

日付の操作に慣れていないので、これらすべてを個別のクエリに分割したいと思います。最初のクエリから始めましたが、すでにそのクエリで失敗しています。私は次のことを試しました:

SELECT * FROM events WHERE (startDate= '2013-03-12' AND endDate= '2013-03-12')

としても:

SELECT * FROM events WHERE NOT (startDate < '2013-03-12' OR endDate > '2013-03-12')

DATE()同様に使用して、「2013-03-12%」のような日付をフォーマットしようとしました。

12 日に少なくとも 1 つのイベントが開催されると確信しているのに、なぜ機能しないのかわかりません。どんな助けでも大歓迎です。

4

4 に答える 4

7

MySQL のDATE()関数を使用して、日付列を日付部分だけにトリミングしてみてください。

SELECT * 
FROM events 
WHERE (DATE(startDate) = '2013-03-12' AND DATE(endDate)= '2013-03-12')
于 2013-03-12T17:58:47.893 に答える
3

他の回答が示唆するように関数を使用できますが、DATE()これにより、列でインデックスを使用するのが難しくなると思います。代わりに、比較に時間を含めることができます。

SELECT *
FROM events
WHERE startDate BETWEEN '2013-03-12 00:00:00' AND '2013-03-12 23:59:59'
  AND endDate BETWEEN '2013-03-12 00:00:00' AND '2013-03-12 23:59:59'
于 2013-03-12T18:04:22.847 に答える
2

MySQLのDATETIMEデータ型は時刻も考慮するため、何にも一致しません。

時間部分を使用しない場合は、データ型をDATEの代わりに単純に減らすことができますDATETIME。そうでない場合は、DATE()関数を使用して時間部分を取り除き、日付部分のみを考慮することができます

于 2013-03-12T18:01:27.390 に答える
0

Mysql between で使用する場合はこれに注意してください

date_column_name between 'startDate' AND 'endDate'

注: に +1 の日付を挿入する必要がありますendDate。に 2015-05-18 の日付を挿入すると、endDate.you は 2015-05-18 のデータを取得できないため、 に 1 つの日付を追加する必要がありますendDate

于 2015-05-18T07:44:29.647 に答える