我有一个包含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-10
放入2012-09-09
,然后它不包含9月9日的数据。但是,如果我将日期更改为2012-09-10
,那么它将包括数据。似乎没有时间,mySQL默认为午夜或00:00:00
有没有办法改变它或解决这个问题?比如,在某个阶段加入时间(23:59:59)到todate
?即使用以下
set todate = todate.STR_TO_DATE("23:59:59");
答案 0 :(得分:1)
慢 - 将列强制转换为DATE类型:
... WHERE DATE(column_yyyymmddhhmmss) BETWEEN fromdate AND todate
更快 - 强制上限到DATETIME,包括最后一秒:
... WHERE column_yyyymmddhhmmss BETWEEN user_fromdate AND CONCAT(user_todate, '23:59:59');
答案 1 :(得分:1)
您应该使用>
和<
运算符代替BETWEEN
运算符,因为它不包含日期(假设您的列为datetime
)。如果您只指定2011-01-31
,则相当于2011-01-31 00:00:00
。
示例:
SELECT * FROM t1 WHERE date > DATE_SUB(fromdate, INTERVAL 1 SECOND)
AND date < DATE_ADD(todate, INTERVAL 1 DAY)
中查看