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

有没有办法改变它或解决这个问题?比如,加入时间(23:59:59)到todate某个阶段?即使用以下

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

2 回答 2

1

慢 — 将列强制转换为 DATE 类型:

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

更快 — 将上限强制为 DATETIME,包括当天的最后一秒:

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

您应该使用>and<运算符,而不是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)

看到它在行动

于 2012-10-04T13:23:14.093 回答