我想要两个日期之间的所有行。我在之间尝试了<strong>,但它没有显示相同日期的值,即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
答案 0 :(得分:7)
这就像你的测试一样:
mysql> select '2013-12-30 12:11:23' BETWEEN '2013-12-30' AND '2013-12-30' as test;
+------+
| test |
+------+
| 0 |
+------+
这是使用日期时间值的正确方法:
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 doc:
MySQL将时间值转换为日期或日期和时间值 将时间的字符串值解析为日期或日期和时间。这个 不太可能有用。例如,'23:12:31'被解释为a 日期变为'2032-12-31'。时间值无效,因为日期变为 '0000-00-00'或NULL。
显式转换可用于覆盖隐式转换。对于 例如,在DATE和DATETIME值的比较中,DATE值为 通过添加'00:00:00'的时间部分强制转换为DATETIME类型。至 通过忽略DATETIME值的时间部分来执行比较 相反,请按以下方式使用CAST()函数:
date_col = CAST(datetime_col AS DATE)
我认为可能是一个错误...
答案 1 :(得分:1)
SELECT * FROM your_table WHERE date BETWEEN '2012-02-28' AND '2012-03-30'
答案 2 :(得分:0)
使用between
,例如:
SELECT * FROM some_table_name WHERE date_column BETWEEN '2009-05-28' AND '2012-12-14'
我的情况是:
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 BETWEEN '2013-01-03' AND '2013-01-03' GROUP BY MONTH( access_date ) ORDER BY
access_date ASC
expr
BETWEENmin
和max
如果
expr
大于或等于min
且expr
小于或等于max
,则BETWEEN返回1,否则返回0. 如果所有参数的类型相同,则相当于表达式(min
&lt; =expr
ANDexpr
&lt; =max
)。否则类型转换根据第11.2节“表达式评估中的类型转换”中描述的规则进行,但适用于所有三个参数。
所以它真的只是语法糖。
答案 3 :(得分:-2)
尝试像这样改变
SELECT *
FROM your_table
WHERE date BETWEEN '2013-01-01 00:00:00' AND '2013-01-01 23:59:59'