1

次のようなデータを含む列があり2012-09-09 13:20:00ます。次のクエリでテーブルをクエリしようとすると、現在のデータが含まれていません。

Procedure test (IN fromdate date, IN todate date)

Select * from table where date between fromdate and todate

ユーザーがに入力2012-08-102012-09-09たとすると、9月9日のデータは含まれません。ただし、日付をに変更する2012-09-10と、データが含まれます。時間が含まれていない場合、mySQLのデフォルトは深夜または00:00:00のようです。

それを変更する方法またはこれを回避する方法はありますか?todateたとえば、ある段階で時間(23:59:59)に参加しますか?つまり、以下を使用します

set todate = todate.STR_TO_DATE("23:59:59");
4

2 に答える 2

1

遅い—列をDATE型に強制変換します。

... WHERE DATE(column_yyyymmddhhmmss) BETWEEN fromdate AND todate

より高速— 1日の最後の秒を含むDATETIMEに上限を強制します:

... WHERE column_yyyymmddhhmmss BETWEEN user_fromdate AND CONCAT(user_todate, '23:59:59');
于 2012-10-04T13:22:50.533 に答える
1

日付に関して包括的ではないため、代わりに>and<演算子を使用する必要があります(列がであると想定)。を指定するだけの場合は、と同等です。BETWEENdatetime2011-01-312011-01-31 00:00:00

例:

SELECT * FROM t1 WHERE date > DATE_SUB(fromdate, INTERVAL 1 SECOND) 
     AND date < DATE_ADD(todate, INTERVAL 1 DAY)

実際に見てください

于 2012-10-04T13:23:14.093 に答える