0

質問があります:

SELECT ... FROM orders WHERE date_created BETWEEN '2012-07-30' AND '2012-07-30'

日付には1000以上のエントリがありますが、0の結果を返します2012-07-30BETWEEN単に終了日を取得しないことがわかったので、

BETWEEN '2012-07-28' AND '2012-07-30'

... 30ではなく28、29のエントリを取得する必要があります。

どうすれば終了日自体も取得できますか?

4

5 に答える 5

2

日付には絶対に使用BETWEENしないでください (特に日時には使用しないでください)。以下を使用できます。

WHERE date_created >= '2012-07-30' 
  AND date_created < '2012-07-31' 
---or:             < '2012-07-30' + INTERVAL 1 DAY
-------------------^-------------- notice the lack of the equal sign here

DATEDATETIMEおよびTIMESTAMPデータ型と同様に機能します。

の提案されたソリューションでは、まだ一部の行が欠落している可能性があることに注意してくださいBETWEEN '2012-07-30' AND '2012-07-30 23:59:59'

詳細な説明については、次の素晴らしいブログ投稿をお読みください。

BETWEEN と悪魔の共通点は何ですか?

ブログでは SQL-Server の問題について説明していますが、ほとんどの部分はBETWEENMySQL にも適用されます (ただし、まだ存在しないミリ秒のサポートを除きます。@Ignacio が修正してくれたことに感謝します)。

于 2012-07-31T23:38:20.620 に答える
2

一日の始まりではなく、一日の終わりを伝えましょう。

'2012-07-30 23:59:59'
于 2012-07-31T23:27:00.337 に答える
0

正確にこれを行う(min <= expr AND expr <= max)の間にさらに情報を追加するには、ここから取得します

他の人が指摘しているように、あなたは時間を逃しました、そして日付が誕生日のようなものに使われない限り、それはタイムスタンプである方が良いです

于 2012-08-01T00:28:14.870 に答える
0

クエリの終了日に 1 日追加します。

  BETWEEN('2012-07-28', DATE_ADD('2012-07-30', INTERVAL 1 DAY)
于 2012-07-31T23:26:58.147 に答える
0

単に使用しないのはなぜですか

... WHERE date_created= '2012-07-30'

于 2012-07-31T23:27:42.543 に答える