0

こんにちは私はなぜこのステートメントがmySQLで機能しているのか疑問に思いました

SELECT COUNT(*) AS `numrows` 
FROM (`myTable`) 
WHERE DATE_FORMAT(creationDateTime, '%m/%d/%Y') BETWEEN '02/21/2011' AND '03/20/2011'

しかし、これはそうではありません

SELECT COUNT(*) AS `numrows` 
FROM (`myTable`) 
WHERE DATE_FORMAT(creationDateTime, '%m/%d/%Y') BETWEEN '12/21/2010' AND '03/20/2011'

最初のステートメントは行数の「xx」カウントを返し、2番目のステートメントは「0」を返します

私が見る唯一の違いは、「開始」日が2010年で、「終了」日が2011年であるということです。これが「2010年12月31日」から問い合わせた問題であるかどうかをテストするために、結果は0でしたが開始日を「2011年1月1日」に設定すると、その期間に作成されたレコードの数がわかりました。

mySQLのBETWEENと異なる年の日付の使用に関して私が見逃しているものはありますか?

助けてくれてありがとう!

4

2 に答える 2

3

日付形式を使用してみてくださいBETWEEN '2010-12-21' AND '2011-03-20'。また、DATE_FORMAT()関数を削除します。

したがって、この:

SELECT COUNT(*) AS `numrows` 
FROM `myTable` 
WHERE creationDateTime BETWEEN '2010-12-21' AND '2011-03-20'
于 2011-03-21T14:58:02.057 に答える
1

DATE_FORMAT()は、日付ではなく文字列を返します。これを使用すると、日付の比較ではなく文字列の比較が強制されます。DATE_FORMATを省略し、代わりにYYYY-MM-DD日付文字列を使用する必要があります。

于 2011-03-21T15:01:57.437 に答える