我要两个日期之间的所有行。我尝试了之间的,但它没有显示值的同一日期,即2013-01-01至2013-01-01。在这种情况下,结果为null。但如果我给出的日期是2013-01-01到2013-01-02。它显示了2013-01-01整日的10行。任何想法,伙计们,如何解决这个问题在MySQL。我的查询是这样的
SELECT MONTHNAME(access_date) as date,
DATE_FORMAT( access_date,'%d/%m/%Y') as month_date ,
COUNT( log_id ) as total_count
FROM user_activity_log
WHERE dam_id =
(SELECT dam_id FROM dam_content_details
WHERE content_type= 'userLogin') AND
access_date >= '2013-01-03' AND
access_date <= '2013-01-03'
GROUP BY MONTH( access_date )
ORDER BY access_date ASC 发布于 2013-12-30 09:43:52
这就像你的测试:
mysql> select '2013-12-30 12:11:23' BETWEEN '2013-12-30' AND '2013-12-30' as test;
+------+
| test |
+------+
| 0 |
+------+这是处理datetime值的正确方法:
mysql> select '2013-12-30 12:11:23' BETWEEN '2013-12-30 00:00:00' AND '2013-12-30 23:59:59' as test;
+------+
| test |
+------+
| 1 |
+------+这是在日期和日期时间值之间工作的解决方法:
mysql> select CAST('2013-12-30 12:11:23' AS DATE) BETWEEN '2013-12-30' AND '2013-12-30' as test;
+------+
| test |
+------+
| 1 |
+------+来自MySQL文档
MySQL通过将时间的字符串值解析为日期或日期和时间,将时间值转换为日期或日期和时间值。这不太可能有用。例如,将“23:12:31”解释为“2032-12-31”。时间值无效,因为日期变为“0000-00-00”或“空”。 显式转换可用于覆盖隐式转换。例如,在日期值和日期时间值的比较中,通过添加'00:00:00‘的时间部分,将日期值强制为日期时间类型。若要通过忽略DATETIME值的时间部分来执行比较,请以下列方式使用CAST()函数: date_col = CAST(datetime_col为日期)
在我看来可能是个虫子..。
发布于 2013-12-30 08:58:26
SELECT * FROM your_table WHERE date BETWEEN '2012-02-28' AND '2012-03-30'发布于 2013-12-30 09:23:11
试着像这样改变
SELECT *
FROM your_table
WHERE date BETWEEN '2013-01-01 00:00:00' AND '2013-01-01 23:59:59'https://stackoverflow.com/questions/20836269
复制相似问题