0

mysqlデータベースで日付までのすべての予定を検索しようとしています。日付はこの形式です。

 2012-07-26

これは、別のページのドロップダウン選択ボックスから関連する予定を選択するために使用しているコードです。

    AND SUBSTRING(startDate, 6, 2) >= $month
    AND SUBSTRING(startDate, 6, 2) <= $month2 
    AND SUBSTRING(startDate, 9, 2) <= $day 
    AND SUBSTRING(startDate, 9, 2) <= $day2

私が抱えている問題は、02のような日を選択した場合、結果はどの月でも02より前の日だけになるということです。私はもっ​​と似たようなものが必要ですが、

 SUBSTRING(startDate, 6, 5) <= '$month2'-'$day2' 

正しく表現する方法がわかりません。

4

2 に答える 2

2

列がまたはタイプであるとSUBSTRING想定するのではなく、MySQLの日付関数を使用する必要があります。DATEDATETIME

関連する日付関数:

  • DAY()
  • MONTH()

新しいコード:

AND MONTH(startDate) >= $month
AND MONTH(startDate) <= $month2
AND DAY(startDate) <= $day
AND DAY(startDate) <= $day2

BETWEEN演算子を使用できる場合もあります。

ドキュメンテーション

于 2012-12-03T16:53:08.220 に答える
0

なぜ次のようなものではないのですか?

SELECT ...
WHERE startDate BETWEEN '2012-07-25' AND '2012-07-27'

またはダイナミックレンジが必要な場合

WHERE startDate BETWEEN (now() - INTERVAL 1 WEEK) AND (now() + INTERVAL 1 WEEK)

通常、日付値に対して文字列操作を行う必要はありません。MySQLには、ほとんどすべてを処理する非常に優れた日付操作/取得/フォーマット関数のセットがあります。

于 2012-12-03T16:56:09.863 に答える